STM32 virtual COM-Port via USB, Abfrage ob auf PC geöffnet

OP #7653495
Lesenswert?

Ich habe hier ein STM32F407G-DISC1 Evalboard (mit STM32F407VGT6 drauf). Das programmiere ich mit Hilfe von STM32CubeMX und STM32CubeIDE.

Der USB_OTG_FS ist als Full Speed (12 MBit/S) Device konfiguriert. Darauf setzt die USB_DEVICE Middleware auf.

Ich mag damit (Debug-)Ausgaben auf einen virtuellen COM-Port machen. Nachdem erstmal relativ viel funktioniert (die Ausgaben kommen bei meinem Terminalprogramm an), musste ich feststellen, dass ohne auf dem PC geöffneten COM-Port alles ins Stocken gerät, da CDC_TransmitCplt_FS (Data transmitted callback) nicht mehr aufgerufen wird, und ich mir die Beine in den Bauch warte, dass meine Puffer wieder frei werden.

Meine Frage ist also : Wie kann ich im Programm feststellen, ob ein Programm auf dem PC meinen virtuellen COM-Port geöffnet hat oder nicht ? Wenn es niemanden interessiert, kann ich mir ja sogar die ganzen Ausgaben sparen.

#7653535
Lesenswert?

Flunder schrieb:

Meine Frage ist also : Wie kann ich im Programm feststellen, ob ein Programm auf dem PC meinen virtuellen COM-Port geöffnet hat oder nicht ?

Das reicht nicht. Das Programm, das den virtuellen COM-Port geöffnet hat, muß auch genug davon lesen. Und ob das Programm dazu gewillt ist und fürderhin auch gewillt sein wird, kannst Du natürlich nicht feststellen.

Du kannst nur feststellen, ob der Gerätetreiber willens ist:

if(hUsbDeviceFS.dev_state==USBD_STATE_CONFIGURED)

Persönliche Seite #7653546
Lesenswert?

Das hatten wir hier schon mal ausführlich diskutiert... Das Ergebnis: Es geht im Endeffekt nicht. Du kannst nur prüfen ob der Puffer voll ist (weil er nicht abgeholt wird) und dann ggf. halt gar nicht senden (wodurch die Daten verloren gehen). Blöd ist halt dass dann uralte Daten im USB-Hardware-Puffer herumoxidieren und dann als erstes am PC ankommen, wenn man dann die Daten abholt.

Man könnte die Flusskontroll-Nachrichten missbrauchen um die Debug-Nachrichten explizit zu aktivieren.

Beitrag #7653827 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren