Ich verwende STM32 VCP-Firmware und sende Daten an meine PC-Anwendung
Wenn ich meine serielle Schnittstelle im PC nicht geöffnet habe und meine Firmware weiterhin die Daten sendet, wird USB_BUSY ausgelöst (ich denke, der Firmware-Übertragungspuffer ist voll und wartet darauf, dass die PC-Seite Daten empfängt).
Wenn ich die serielle Schnittstelle in meiner PC-Anwendung während des USB_BUSY öffne, wird der PC hängen bleiben!
Darf ich wissen, wie ich den Zustand USB_BUSY in meiner Firmware handhaben kann? wie kann ich dieses Problem lösen?
Meine PC-Seite ist USB, als VCP emulieren
Ich habe es geschafft, das Problem zu lösen, aber keine gute Lösung, du ...
Ich habe 2 Dinge hinzugefügt:
Ich habe ein neues Protokoll hinzugefügt, das START- und STOP-Befehl ist. Ich brauche meine PC-Seite, um einen STAT-Befehl an meine Firmware zu senden, bevor sie beginnt, Daten an meinen PC zu senden
Immer wenn es sich um den USB_BUSY-Modus handelt, sende ich einen leeren Puffer, damit die VCP-Firmware einen Interrupt auslösen kann, und dies löscht mein USB_BUSY
Ich habe nur diese Codezeile hinzugefügt
USBD_LL_DataInStage((USB handler), (endpoint), 0); // 0 = empty buffer
Ich würde gerne wissen, ob jemand eine bessere Lösung hat!
AKTUALISIEREN!!!
Ich habe dieses Problem endlich gelöst, indem ich den gesamten STM32-HAL-Treiber für USB-CDC durch die Standard-Peripheriebibliothek für USB-CDC ersetzt habe!
und es gibt kein problem mehr damit! Ich habe viele Probleme mit dem HAL-Treiber von STM32, er ist sehr fehlerhaft! Wenn Sie damit auf ein Problem stoßen, versuchen Sie, zurück zur Standard-Peripheriebibliothek zu wechseln!
Es scheint ein Handshaking-Problem zu sein.
Der VCP-Treiber täuscht Ihren USB an einen RS232-Port vor, wenn Sie einen solchen Port öffnen, muss er möglicherweise die Baudrate, das Datenformat, die Parität, das Stoppbit usw. konfigurieren. Ihr Gerät sollte also keine Daten an Ihren Host senden, wenn dies der Fall ist Konfiguration nicht durchgeführt.
Wenn Sie also die VCP-Klasse verwenden müssen, sollte Ihr Gerät Daten senden, nachdem die COM-Konfiguration abgeschlossen ist. Oder Sie können Ihr eigenes Protokoll erstellen, sogar Ihre eigene USB-Klasse, aber dazu müssen Sie den USB-Treiber auf der PC-Seite neu schreiben.
Dies sind die USB-CDC-Klassendefinitionen (auf denen VPC basiert), die Ihnen möglicherweise helfen können.
Abweichler
Tim
Abweichler
Abweichler
Tim