STM32F7-Erkennungs-USB-Geräte-CDC mit CubeMX

Ich möchte einige Bytes mit STM32F7-Erkennung über USB CDC (HS oder FS) an meinen Laptop senden . Ich habe das von keil microvision bereitgestellte virtuelle COM-Beispiel getestet, sodass die Hardware in Ordnung ist, aber ich muss es mit STM32CubeMX tun. Die Bibliotheken sind unterschiedlich und das größte Glück, das ich hatte, war, Virtual Com Port im Geräte-Manager zu sehen. aber Hyperterminal oder Putty können es nicht erkennen und es werden keine Daten gesendet oder empfangen. Ich habe meinen Beispielcode-Link und die Uhrkonfiguration angehängt, also schätze ich, wenn jemand helfen und mir sagen könnte, was das Problem ist.

Mein Beispielcode

Uhr Konfig

Dies ist kein Problem, das auf Seiten wie e.se leicht gelöst werden kann. Ich habe viel mit STM32 USB gearbeitet, und CubeMX hat VCP-Beispiele, die Sie wahrscheinlich nutzen können, um Ihre zum Laufen zu bringen. Es ist ein etwas langwieriger Prozess und kann Sie in die zwielichtige Schattenseite des Low-Level-USB-Betriebs führen.
Das hat bei mir funktioniert: stackoverflow.com/a/33555364/3820025 Stellen Sie sicher, dass der STM32-VCP-Treiber korrekt installiert ist (lesen Sie auch die Kommentare unter der Antwort.)

Antworten (1)

Endlich habe ich die Lösung gefunden. Das Problem hing mit der Heap-Größe zusammen. Ich habe die Heap-Größe in der Startdatei von 200 Bytes auf 400 Bytes erhöht, es funktioniert also wie ein Zauber. Aber noch ist nicht das ganze Problem gelöst. Wenn ich Keil rtx verwende, funktioniert es nicht mehr. Das vorherige Problem taucht wieder auf. Ich glaube, es geht um die Stapelgröße in der RTX-Konfiguration, aber mit einigen Änderungen funktioniert es immer noch nicht.

Edit: Nach vielen Herausforderungen hat es geklappt. In diesem Link werden einige Tipps zur Verwendung von RTOS-RTX mit Stm32CubeMX beschrieben. Eines der Dinge, die Sie tun müssen, ist, die Priorität des SysTick-Timers auf den niedrigsten Wert einzustellen. Dies steht im Konflikt mit USB-Interrupts. Um USB-CDC mit RTOS-RTX in Stm32CubeMX zu verwenden, müssen Sie die Priorität des globalen USB-OTG-Interrupts niedriger als den SysTick-Timer einstellen. Wenn Sie also die SysTick-Priorität auf 14 und USB-OTG auf 15 setzen, wird das Problem gelöst.