Всем привет!) продолжаем работать с кастомным USB HID — ом, теперь на STM32F4 (STM32F4DISCOVERY). Будем юзать HAL, для начала необходимо скачать STM32CubeMX. После установки запускаем его (SMT32F4CubeMX — и обновляем его с помощью STM32CubeUpdater – необходимо скачать данную софтину), и создаем новый проект New Project, переходим во вкладку Board Selector и из приведенного списка выбираем Discovery STM32F4DISCOVERY STM32F407VG и нажимаем ОК. Алгоритм наших действий:
1. Во вкладке Pinout -> IPs, находим USB_OTG_FS, выбираем из выпадающего списка Mode -> Device Only (можно поставить галки на Activate_SOF и Activate_VBUS).
2. Во вкладке Pinout -> MiddleWares, находим USB_DEVICE, ПО нам подсказывать, что нужно выбрать Class For FS IP, затем выбираем из выпадающего списка Human Interface Device Class (HID).
3. В верхнем меню выбираем Project -> Generate Code (Ctrl + Shift +G).
4. В появившемся окне, вводим названием проекта, путь сохранения проекта и IDE-шку в которую мы с вами будем портировать проект, у меня это Keil (MDK — ARM).
5. Открылся проект в Keil, щелкаем 2 раза по Drivers/STM32F4xxHAL_Driver, в папке проекта переходим Drivers-> STM32F4xxHAL_Driver->Src-> stm32f4xx_hal_pcd_ex.c добавляем этот файл.
6. В верхнем меню Project->Options for Target ‘Ваше название проекта Configuration’, переходим во вкладку Utilities, снимаем галку Use Debag Driver, нажимаем кнопку Settings во вкладке Flash Download, делаем настройки: вместо Erase Sectors -> Erase Full Chip и ставим галку на Reset and Run
7. В том же окне в Debug меняем Port: JTAG на SW.
8. Нажимаем F7 Build проекта и Download проекта.

В системе определился USB HID Mouse, да – да мышь, думаю в 3 части про USB HID я выложу проект зловредной флешки, с виду флешка, а на самом деле USB HID Keyboard, которая устроит полный апокалипсис вашему компу, со всеми схемами и pcb- ишку.

Но нам необходимо кастомный USB HID, «дело было вечером, делать было нечего», начинаем изменять проект:

Добавляем в начала сишника прототип на функцию и затем где-нибудь в конце вставляем уже описание функции

Так же из usb_device.c необходимо вырезать USBD_HandleTypeDef hUsbDeviceFS и вставить в usbd_hid.c и вверху файла usbd_hid.c добавляем

Изменяем ашник usbd_hid.h

Изменяем сишник usbd_desc.c

Затем меняем main.c добавив несколько строк кода

Проект для stm32f401c-disco (добавлен 05.02.2015)

И наслаждаем работай устройства. Примечание: в прошлой статье я писал, что для верхнего уровня делаем тройную перезапись буфера, зачем?, а за тем что когда идет запись из ПК в устройство, первые данные приходят хорошо, вторые данные могут не прейти потому что, буфер эндпоинта еще не успел их обработать они теряются и девайсена отсылает несколько раз тоже самое, что бы этого не происходило советую написать свой интерфейсик для обработки этой ситуации или ставить таймауты на запись в устройство, они же слипы (функция Sleep), хотя это значительно может снизить эффективность вашего устройства. На сегодня ВСЁ!, всем ПОКА!)

14
Отправить ответ

avatar
6 Comment threads
8 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
Crazistorb52fantasyddAlexДима Recent comment authors

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
Самый новый Самый старый Наиболее проголосовали
Уведомлять о
Сергей
Гость

как у вас публиковаться?

Дима
Гость
Дима

Классная статья. У меня все заработало, супер, респек автору. Только у Вас рабочий пример с хидом, а то везде какая то лажа, да же могучий сайт di halt-а не помог, а там все очень на хорошем уровне)

Alex
Гость
Alex

А можете выложить проект?

fantasydd
Гость
fantasydd

Простите есть же КастомХид в SMT32FCubeMX почему бы не использовать его?

b52
Гость
b52

Добрый день! Подскажите, пожалуйста, новичку, что именно прописать в файле usbd_custom_hid_if.c (не нашел в описании USB параметра «дескриптор протокола»). При сборке примера из SMT32FCubeMX Custom HID для STM32F4Discovery (stm32f407) такая же ошибка “Запуск этого устройства невозможен. (Код 10) Найдена лишняя конечная коллекция, или конечные коллекции не обнаружены.” (win8.1 64)

Crazistor
Гость
Crazistor

Столкнулся с такой же проблемой при использовании Custom HID Device. Решение нашел по ссылке http://radiokot.ru/forum/viewtopic.php?f=59&t=115643