Схем на эту китайскую плату (700р.) с алиэкспресс найти не удалось естественно. Но JTag разъем сразу виден (20pin - ошибки быть не может это он)1.
Используем STM32CubeMX + Keil 5 для получения первого результата
Используем программатор ST -LINK/V2 c JTag разъемом (шьем и отлаживаем по Jtag/SWD). Можно также шить/отлаживать и через JLink например.
В результате 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 контактов):
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 :
проблемы и зависания
Вообще-то первым делом всегда надо как-то отслеживать , что плата выполняет код (не находится в зависании).
Первое , что в голову приходит - это моргать светодиодом. Связка
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_3);
HAL_Delay(1000);
в бесконечном цикле прекрасно работает. Поэтому тупо проверить ,что плата работает вполне подходит.
Но при наличии MX_USB_HOST_Process(); мы не можем себе позволить задержки и более короткие чем 1000мкс. (HAL_Delay подвешивает систему).
Поэтому чтобы хоть как-то контролировать процесс можно мигать светодиодом через прерывание от таймера, который в основном цикле не останавливает выполнение программы.
К сожаления пока пример не доделан до конца
Поэтому выложить его не представляется правильным.