STM32 и USB-HID
Добавлено: 18 ноя 2018, 13:39
Вновь приветствую эмбед-сообщество. Захотел сделать USB-HID девайс на STM32F103C8. А конкретно нужно было сделать что-то типа клавиатуры, только с меньшим количеством кнопок. Гугл дал несколько примеров по запросу "usb клавиатура на stm32" и я выбрал из них наиболее простой вариант - готовый проект под CoIDE (под keil не стал брать потому что кряка не было). На скоряк сделал плату аля ардуино, тока на ф103 камне. Скомпилил, зашил мк, подключаю к компутеру и через 2 секунды вижу грустную надпись на мониторе "USB-устройство не опознано":
Пример я брал отсюда: http://www.avislab.com/blog/stm32-usb_ru/
Вынул USB-шнур, повертел платку в руках, дай думаю еще раз воткну и неожиданно комп определил RHID STM32:
При этом в Диспетчере устройств:
Я подумал что это какая-то хардверная проблемка (у меня была куча навесного монтажа в том числе и в шинах данных USB) и решил на нее подзабить, мол потом сама уйдет когда новую плату сделаю. В общем эта ошибка вылазила с совершенно случайной вероятностью. Причем когда ее не было, винда мгновенно подхватывала девайс и все работало как надо. Предвестником ошибки была 2-х секундная задержка до звукового оповещения при втыкании USB-шнура.
Новая плата (знаю, что тоже колхоз, но первая версия была еще хуже), а вообще платы буду заводские заказывать, когда макет заработает как надо:
И как оказалось, новая плата ничего не изменила. Как девайс коннектился со случайной вероятностью, так и осталось. Решил проверить на других компах и обнаружил, что на вин7 платка коннектится идеально в 100% случаев. Причем определяется девайс немного по-другому:
На моем компе стоит вин10. На другом компе с вин10 проблема абсолютно аналогичная. Причем описание ошибки как бы намекает, что проблема может быть в неверном дескрипторе устройства. Но почему тогда на вин7 все работает?
Дальнейшие поиски привели наконец к нахождению Pro-версии MDK-ARM, и оказалось что даже официальные STM'овские примеры ведут себя точно также, выдают точно такую же ошибку. В общем вот так как-то, сейчас руки уже опускаются, поэтому мог забыть что-то указать. За помощь готов платить, но только чисто символически, тк студент.
Ах да, пробовал все способы посыла сигнала компу о готовности устройства (я про резик 1.5к с +3.3V на D+). Пробовал и софтверно подтягивать, и сразу замыкать как на всех китайских платах, и вручную тыкать - результат один. Также находил в интернете и другие примеры работы с USB в STM32 => сейм проблем.
Ошибка, которую выдает винда забыл написать: "Сбой запроса дескриптора устройства".
Пример я брал отсюда: http://www.avislab.com/blog/stm32-usb_ru/
Вынул USB-шнур, повертел платку в руках, дай думаю еще раз воткну и неожиданно комп определил RHID STM32:
При этом в Диспетчере устройств:
Я подумал что это какая-то хардверная проблемка (у меня была куча навесного монтажа в том числе и в шинах данных USB) и решил на нее подзабить, мол потом сама уйдет когда новую плату сделаю. В общем эта ошибка вылазила с совершенно случайной вероятностью. Причем когда ее не было, винда мгновенно подхватывала девайс и все работало как надо. Предвестником ошибки была 2-х секундная задержка до звукового оповещения при втыкании USB-шнура.
Новая плата (знаю, что тоже колхоз, но первая версия была еще хуже), а вообще платы буду заводские заказывать, когда макет заработает как надо:
И как оказалось, новая плата ничего не изменила. Как девайс коннектился со случайной вероятностью, так и осталось. Решил проверить на других компах и обнаружил, что на вин7 платка коннектится идеально в 100% случаев. Причем определяется девайс немного по-другому:
На моем компе стоит вин10. На другом компе с вин10 проблема абсолютно аналогичная. Причем описание ошибки как бы намекает, что проблема может быть в неверном дескрипторе устройства. Но почему тогда на вин7 все работает?
Дальнейшие поиски привели наконец к нахождению Pro-версии MDK-ARM, и оказалось что даже официальные STM'овские примеры ведут себя точно также, выдают точно такую же ошибку. В общем вот так как-то, сейчас руки уже опускаются, поэтому мог забыть что-то указать. За помощь готов платить, но только чисто символически, тк студент.
Ах да, пробовал все способы посыла сигнала компу о готовности устройства (я про резик 1.5к с +3.3V на D+). Пробовал и софтверно подтягивать, и сразу замыкать как на всех китайских платах, и вручную тыкать - результат один. Также находил в интернете и другие примеры работы с USB в STM32 => сейм проблем.
Ошибка, которую выдает винда забыл написать: "Сбой запроса дескриптора устройства".