Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 15:55

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: STM32 HAL USB-MIDI Device Driver
СообщениеДобавлено: 09 янв 2018, 02:01 
Только пришел

Зарегистрирован: 08 янв 2018, 23:59
Сообщения: 5
Здравствуйте товарищи!

Сейчас занимаюсь созданием народного опенсорс синтезатора на базе STM32F407Discovery. Потребовалось реализовать функцию передачи Midi по USB. Разумеется, ничего подобного в стандартной комплектации CubeMX не предусмотрено. Поэтому на просторах интернетов был найден исходник проекта нашего японского комрада (к слову довольно кривоватый), оттуда выдран, перепакован и допилен USB драйвер для своих нужд.

По сути драйвер представляет из себя переделанный в Midi CDC из конструктора Cube MX. (исходники во вложении)
Работает следующим образом.

По приходу данных с компьютера, вызывается прерывание USBD_MIDI_DataOut, которая вытаскивает данные, устанавливает конечную точку на прием и дергает MIDI_DataRx, в которой уже происходит обработка данных и утрамбовка в кольцевой буфер в виде обычных midi сообщений для последующей обработки в основном цикле, как если бы их приняли по UART.

Когда требуется передать данные в компьютер, дергаем функции USBD_AddNoteOn, USBD_AddNoteOff, USBD_AddSysExMessage для подготовки буфера APP_Rx_Buffer, а потом ставим на передачу при помощи USBD_SendMidiMessages. Последняя передает пакет данных длинной максимум 64 байта. По завершению передачи вызывается прерывание USBD_MIDI_DataIn, которое ставит флаг на передачу следующего пакета, который уже передается в main.c из основного цикла if (USB_Tx_State == USB_TX_CONTINUE) USBD_MIDI_SendPacket();

Все хорошо работает, пока передаются малые объемы данных. Но когда я передаю длинное SysEx (около килобайта), а в это время приходят данные из компьютера, иногда случается так, что прерывание USBD_MIDI_DataOut не срабатывает, соответственно конечная точка не сбрасывается и драйвер перестает принимать данные. Похоже что когда одновременно срабатывают оба прерывания, USBD_MIDI_DataIn перебивает USBD_MIDI_DataOut. Я временно сделал костыль, который принудительно вызывает USBD_MIDI_DataOut из USBD_MIDI_DataIn. это помогает, но очевидно так оно работать не должно и выкладывать такой колхоз на пользу народа не хочется.

Т.к. работает драйвер, как обычный COM порт и логика у них общая, может кто сталкивался с подобным при работе с COM?

Я уже не знаю где искать. Помогайте, товарищи!

Или хотя бы расскажите, как USB дергает эти два прерывания? До этого с USB дела не имел.

Show usbd_midi.h


Show usbd_midi.c


Show usbd_midi_if.h


Show usbd_midi_if.c


Вложения:
STM_32_HAL_USB_MIDI.zip [38.45 Кб]
Скачиваний: 137
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 HAL USB-MIDI Device Driver
СообщениеДобавлено: 10 мар 2018, 02:26 
Здравствуйте!

Зарегистрирован: 10 мар 2018, 02:21
Сообщения: 1
Привет, тоже интересуюсь данной темой, только я пытаюсь просто сделать приём и обработку и все, но вот не получается понять весь код


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 HAL USB-MIDI Device Driver
СообщениеДобавлено: 01 апр 2020, 07:38 
Только пришел

Зарегистрирован: 08 янв 2018, 23:59
Сообщения: 5
Залил исправленную версию USB-MIDI драйвера и добавил пример для STM32F103
https://yadi.sk/d/mrQxhJtv9OarQA
https://yadi.sk/d/aVeF8IQoxMG9mg


Вложения:
STM_32_HAL_USB_MIDI.zip [110.88 Кб]
Скачиваний: 30
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 HAL USB-MIDI Device Driver
СообщениеДобавлено: 23 апр 2020, 20:04 
Здравствуйте!

Зарегистрирован: 23 апр 2020, 19:49
Сообщения: 2
EternalEngine писал(а):
Залил исправленную версию USB-MIDI драйвера и добавил пример для STM32F103
https://yadi.sk/d/mrQxhJtv9OarQA
https://yadi.sk/d/aVeF8IQoxMG9mg


а у вас есть видеоурок, помогите пожалуйста! вы единственная надежда, бывшему ардуинщику без вас не разобраться здесь, напишите как с вами связаться, только лучше всего в вк, напишите id ваш например, смогу ли я данный пример запустить на cubemx и keil?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 HAL USB-MIDI Device Driver
СообщениеДобавлено: 23 апр 2020, 22:10 
Старожил

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 210
Откуда: Украина
mybox
Если ван нужен пример для STM32f103, то я переделал пример отсюда под кеил (немного поправил код). Работу не гарантирую, но в системе определяется как USB MIDI.

линк


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Glebiys


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB