Ich verwende die STM32 HAL VCP-Firmware, die von CubeMX auf dem STM32F4 Discovery Board generiert wurde. Der Virtual COM Port funktioniert, ich kann beliebig viele Nachrichten vom Mikrocontroller zum PC übertragen. Aber in der anderen Richtung, vom PC zum Mikrocontroller, kann ich nur eine Nachricht senden. Wenn ich versuche, einen zweiten zu senden, wird der static int8_t CDC_Receive_FS (char* Buf, uint32_t *Len)
Rückruf nicht aufgerufen, und auf dem PC hängt RealTerm. Mein Client-Programm hängt sich auch auf, wenn es das zweite Mal versucht, in den COM-Port zu schreiben.
Auf Microntroller-Seite habe ich meinen gesamten Code entfernt CDC_Receive_FS()
, er kehrt derzeit nur zurück USBD_OK
. In der Hauptfunktion gibt es nur einen HAL_Delay()
periodisch aufgerufenen, ich habe versucht, dies auch zu entfernen, aber es hatte keine Wirkung.
Irgendwelche Ideen, was könnte das Problem sein?
Ich habe die Antwort auf meine eigene Frage gefunden. Auf der folgenden Webseite finden Sie ein gut dokumentiertes Beispiel: http://visualgdb.com/tutorials/arm/stm32/usb/
Zuerst musste ich den generierten Code so vervollständigen, static int8_t CDC_Receive_FS (char* Buf, uint32_t *Len)
wie er in der Quelle oben geschrieben ist.
Danach musste ich die int VCP_read(void *pBuffer, int size)
Funktion erstellen und implementieren, wie sie in der oben genannten Quelle geschrieben steht.
Der springende Punkt war, dass ich die Funktion periodisch aufrufen musste int VCP_read(void *pBuffer, int size)
, um die empfangenen Daten aus dem Puffer auszulesen. Wenn ich diese Funktion nicht aufrufe, kann der PC beim nächsten Mal den COM-Port nicht schreiben.
KalleMP
Mailand Tenk
Benutzer101731