USB Host на Keil5(STM32CubeMx) заработал практически сразу

Проверяем железо для USB HOST режима (это ВАЖНО)

Вот к примеру плата с алиэкспресс (вроде для разработок). Но есть ньюнс :

USB D подтянут через резистор 1.3K. на вывод контроллера, куда по логике будет подаваться 3.3В (режим USB Device).
USB D- ни к чему не подтянут.

Это означает, что аппаратно плата предназначена для использования как ведомое USB устройство(USB Device) , т.е. плата как-бы сама клавиатура, мышка и т.д.

Чтобы использовать плату как USB хост устройство надо ОБЯЗАТЕЛЬНО выводы USB D и D- через 15K резисторы подтянуть к земле. Можно просто подпаять:

фотка 1

пример USB HOST устройства на STM32F407 под Keil STM32CubeMx заработал как надо

Стандартно из STM32CubeMx получаем набор файлов h и c с описанием настроек нашего контроллера STM32F407VET6.
Также как обычно STM32CubeMx подготавливает проект для Keil MDK.

фотка 2

Частоты выставляем под USB =48MHz

фотка 3

Настраиваем стандартный вывод диагностических сообщений по SWO через JLink

фотка 4

и в main.c добавляем как обычно вывод отладки:

/* USER CODE BEGIN 0 */
int stdout_putchar(int ch)
{
    ITM_SendChar(ch);
    return(ch);
}
/* USER CODE END 0 */

Запускаем отладчик и видим , что донгл от беспроводной мышки подключился к Хосту по USB нормально:

фотка 5

Обратите внимание мышка беспроводная (с автономным питанием).

Только не надо в цикле добавлять задержки типа HAL_Delay(1000) , т.к. это однозначно мешает USB режиму.

На этом остановимся. Скачать проект можно по ссылке ниже.

Файлы для скачивания

* STM32F407VET6-USB-HOST-KeyBoard-OK [zip]
проект под Keil5 подготовленный в STM32CubeMx