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.
Wie wäre es mit einem Sendepuffer. Die Daten erst in einen Puffer schreiben und wenn der voll ist, die Daten verwerfen. USB dann aus dem Puffer füttern.
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)
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.
:
Bearbeitet durch User
Das war zwar nicht das, auf was ich gehofft habe, aber ich habe mich jetzt damit abgefunden und werte DSR aus. Danke für die Infos.
Flunder schrieb: > Das war zwar nicht das, auf was ich gehofft habe, aber ich habe > mich > jetzt damit abgefunden und werte DSR aus. Danke für die Infos. Ich habe zumindest VUSB an einen GPIO geführt womit ich erkennen kann, ob ein USB Kabel angeschlossen ist.
Beitrag #7653827 wurde vom Autor gelöscht.
Ada J. Quiroz schrieb: > Ich habe zumindest VUSB an einen GPIO geführt womit ich erkennen kann, > ob ein USB Kabel angeschlossen ist. Na, anstelle dessen würde ich das so abfragen: if (hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED) ... Dann weisst Du sogar, ob ein richtiger Host angeschlossen ist. Das steht übrigens auch schon etwas weiter oben in diesem Thread.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.