CDC обнаружения USB-устройства STM32F7 с использованием CubeMX

То, что я хочу сделать, это отправить несколько байтов с обнаружением STM32F7 на мой ноутбук через USB CDC (HS или FS). Я протестировал пример виртуального ком-ма, предоставленный keil microvision, так что аппаратное обеспечение в порядке, но мне нужно сделать это с помощью STM32CubeMX. Библиотеки разные, и мне больше всего повезло, что я увидел Virtual Com Port в диспетчере устройств. но ни Hyperterminal, ни Putty не могут его обнаружить, а данные не отправляются и не принимаются. Я прикрепил ссылку на свой пример кода и конфигурацию часов, поэтому я признателен, если кто-нибудь может помочь и сказать мне, в чем проблема.

Мой пример кода

Конфигурация часов

Это не проблема, которую можно легко решить на таких сайтах, как e.se. Я много работал с STM32 USB, и у CubeMX есть примеры VCP, которые вы, вероятно, можете использовать, чтобы заставить работать свои. Это немного утомительный процесс, который может привести вас в захудалую изнанку низкоуровневой работы USB.
Это сработало для меня: stackoverflow.com/a/33555364/3820025 Убедитесь, что драйвер STM32 VCP установлен правильно (прочитайте также комментарии под ответом).

Ответы (1)

Я наконец нашел решение. Проблема была связана с размером кучи. Я увеличил размер кучи в файле запуска с 200 байт до 400 байт, так что он работает как шарм. Но еще не вся проблема решена. когда я использую Keil rtx, он перестает работать. Снова появляется предыдущая проблема. Я считаю, что речь идет о размере стека в конфигурации rtx, но с некоторыми изменениями он все еще не работает.

Отредактировано: после долгих испытаний получилось. В этой ссылке описаны некоторые советы по использованию RTOS-RTX с Stm32CubeMX. Одна из вещей, которые вам нужно сделать, это установить приоритет таймера SysTick на самое низкое значение. Это конфликтует с прерываниями USB. Чтобы использовать USB-CDC с RTOS-RTX в Stm32CubeMX, вы должны установить приоритет глобального прерывания USB-OTG ниже, чем у таймера SysTick. Таким образом, установка приоритета SysTick на 14 и USB-OTG на 15 решает проблему.