USB HID на STM32F407VET6 под Keil5 (STM32CubeMX)

Схем на эту китайскую плату (700р.) с алиэкспресс найти не удалось естественно. Но JTag разъем сразу виден (20pin - ошибки быть не может это он)1.

Используем STM32CubeMX + Keil 5 для получения первого результата

Используем программатор ST -LINK/V2 c JTag разъемом (шьем и отлаживаем по Jtag/SWD). Можно также шить/отлаживать и через JLink например.

фотка 1

В результате USB HID взлетает быстро и работает (без проблем)

Подготовили в STM32CubeMX , открыли в Keil 5 , прошили и системе появилось новое USB-HID устройство.


Насчет USB-HOST - тут все сложнее

Первые размышления:
Питание на плату можно подавать через micro-USB разъем, также можно через JTag разъем или прямо на выведенные пины (где написано 5V например).

Батарейка на плате не выдает 3.3В на ножки питания контроллера . Это по-видимому только для подпитки энергозависимой памяти.

Программатор ST -LINK/V2 не питает плату через JTag

Программатор ST -LINK/V2 через JTag не подает 3.3В на контроллер (контроллер от него тоже не питается).

А вот JLink для сравнения подает питание на плату через JTag.

В режиме USB HOST самой плате однозначно надо подавать питание 5В на разъем USB и питать подключаемые к этому разъему устройства (клавиатуру например).

А у нас беда - наоборот сама плата должна питается от этого разъема для работы ST -LINK/V2. Возникает вопрос : что делать?

К тому же попутно выясняется что подавать 5В на плату лучше не от USB ПК (не хватает мощи для платы) ?, а от блока питания (1А).

Выход использовать программатор JLink

Нормально питает плату по JTag . Можно подключать клавиатуру или мышку к микро USB разъему и удобно отлаживать весь процесс.

Для общей информации смотрим micro USB разводку (у на 5 контактов):

фотка 2

4 нога (ID) куда-то идет (не земля)


В общем процесс с подключение USB клавиатуры к USB хосту как-то начал шевелиться в правильном направлении

Берем USB-донгл от беспроводной мышки и результат уже более похож на правду :

После запуска контроллера с подключенным донглом : получаем HOST_IDLE - HOST_DEV_ATTACHED - HOST_ENUMERATION - HOST_SET_CONFIGURATION - HOST_CHECK_CLASS (находит 1 класс)- HOST_CLASS_REQUEST

Чтобы отлаживать через jtag4 в STM32CubeMx не забываем настроить так

в STM32CubeMX :

фотка 3

проблемы и зависания

Вообще-то первым делом всегда надо как-то отслеживать , что плата выполняет код (не находится в зависании).

Первое , что в голову приходит - это моргать светодиодом. Связка

HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_3);
HAL_Delay(1000);

в бесконечном цикле прекрасно работает. Поэтому тупо проверить ,что плата работает вполне подходит.

Но при наличии MX_USB_HOST_Process(); мы не можем себе позволить задержки и более короткие чем 1000мкс. (HAL_Delay подвешивает систему).

Поэтому чтобы хоть как-то контролировать процесс можно мигать светодиодом через прерывание от таймера, который в основном цикле не останавливает выполнение программы.

К сожаления пока пример не доделан до конца

Поэтому выложить его не представляется правильным.