USB VirtualComPort: Wie aktive Verbindung mit PC erkennen ?

OP #2817170
Lesenswert?

Ich würde das gerne auf der uC Seite erkennen. Es gibt ja den CDC Class 
Request "SetControlLineState" womit z.B. DTR gesetzt werden kann. Nur 
leider wird das wohl nicht automatisch beim Öffnen des Com Ports 
gesendet.

Ich wollte halt ungerne ständig Daten an den PC senden obwohl niemand 
die Daten abholt. Es bleibt natürlich die Möglichkeit, dass über das 
Protokoll zu regeln.

Gruß
Garag
Gast #2817214
Lesenswert?

Hallo,

ein Terminalprogramm tut garnichts, solange du nicht eine Taste drückst, 
das ist absichtlich so.

Wenn du aber ein eigenes Protokoll fährst, must du dir eh Gedanken über 
die Initialisierung machen, da kannst du entweder den PC oder dein Gerät 
ein Anfrage-Zeichen bzw. Sequenz senden lassen, aber dazu brauchst du 
eben eigene Software, mit einem Terminalprogramm ist sowas wenn 
überhaupt möglich dann sehr mühsam (ganz besonders bei binären Daten, 
ich verwende daher nur noch ASCII-Protokolle).

Manche Programme zum Datenempfang, die Xon/Xoff verwenden, senden nach 
dem Start solange etwa alle Sekunde ein Xon, bis Daten kommen oder das 
Programm wieder beendet wird, das ist so etwa die einfachste Möglichkeit 
für einen "Autostart" beim Zusammenstecken.

Gruss Reinhard
Gast #2821772
Lesenswert?

Hey leutz,

ich möchte bei mir auf meinem stm32l discovery einen Virtuellen com Port 
einrichten und finde im Internet keinen fertigen Code dafür :/
Könnte mir die Jemand zu verfügung stellen??
Wäre sehr dankbar dafür.

gruß
OP #2822188
Lesenswert?

Hallo abudhabi,

von ST gibt es eine USB Lib mit Beispielen. Zu den Beispielen gehört 
auch eine Virtual Com Port Demo. Die Lib verwendet die standard Lib von 
ST.

Da ich die Standard Libs nicht sonderlich mag und gerne direkt mit der 
Hardware arbeite, habe ich mir eine eigene VCP implementierung 
geschrieben. Vom Prinzip her läuft das auch, jedoch wird kein Suspend 
unterstützt und der Empfang von Daten (uC Seite) könnte durchaus noch 
eine Überarbeitung vertragen.

Schau dir am besten erstmal die Sachen von ST an.

Gruß
Garag
Gast #2833590
Lesenswert?

Hey,

Danke für deine Antwort.
Ich habe auf der Website von st 
(http://www.st.com/internet/mcu/product/248820.jsp) die verpackte Datei 
"STM32F10x and STM32L1xx USB full-speed device library" runtergeladen.

Ich arbeite mit der Software µKeil...ich versuche seit 2 Tagen den 
Virtual Comport zum laufen zu bringen und es klappt einfach nicht.
Als erstes ist da kein Code für den stm32l discovery, deshalb habe ich 
die für stm32-eval genommen. Liegt der Fehler schon da???
Die Software Compiliert und ich kann es flashen doch sehe ich keine Com 
Verbindung mit dem computer O.o...
Sollte ich an dem Code noch was machen??

Ich habe bis jetzt leichte programme geschrieben und die Verbindung 
zwischen PC und µC übersteigt mein wissen :/

Ich wäre für hilfe sehr dankbar!

gruß

abuhabi
Gast #2833657
Lesenswert?

Passiert denn wenigstens irgendetwas auf dem PC, wenn du deinnen STM32 
an den USB dransteckst?

Meines Wissens gibt es für virtuelle COM-Ports keine Standardlösung wie 
für Mäuse, Massenspeicher usw. so daß jeder Hersteller irgendwo dann 
doch sein spezielles Süppchen kocht.

W.S.
Gast #2833919
Lesenswert?

> Meines Wissens gibt es für virtuelle COM-Ports keine Standardlösung wie
> für Mäuse, Massenspeicher usw. so daß jeder Hersteller irgendwo dann
> doch sein spezielles Süppchen kocht.
Wieso? Ein VCP gehört zur CDC-Klasse. Dass FTDI beispielsweise einen 
eigenen Treiber anbietet liegt m.E. eher an deren Treibermodell mit der 
Möglichkeit den Chip sowohl als COM-Port ansprechen zu können als auch 
über eine DLL Zugriff zu haben.
Ein weiterer Grund ist, dass die usbser.sys (also die vom OS 
bereitgestellte VCP/CDC-Treiberdatei) von Windows nicht das gelbe vom Ei 
ist und daher werden sich die meisten Hersteller wohl selbst was 
schreiben.

Ich habe für eine 8-Bit-MCU mit USB VCP-Implementierungen gesehen, die 
keinen eigenen Treiber benötigten, lediglich die passende INF-Datei.

Ralf
Gast #2834630
Lesenswert?

> Ich habe es an PA0 und PA1 angeschlossen..in der docu steht USART2...
Wat? Moment, nochmal von vorn... Du hast eine VCP-Firmware auf den 
Controller geschubst, richtig?
Welche USB-Schnittstelle des Boards verwendest du? Soweit ich sehen 
kann, ist eine Buchse vorhanden, die sieht mir aber stark nach der für 
den on-board-Programmer/Debugger aus. Weitere USB-Anschlüsse bzw. -kabel 
müsstest du also selber dranlöten.
Und sicher nicht USB-Kabel an USART2, denn ein U(S)ART ist kein 
USB-Anschluss.

Ralf
Gast #2834783
Lesenswert?

Ich hab mich mit PA0 und PA1 vertan..PA11 und PA12 habe ich genommen. 
Ich bekomme als meldung das ein unbekanntes USB gerät angeschlossen ist, 
obwohl die treiber software installiert ist...???

Kann ich auf stm32l discovery die Software vom stm32l Eval benutzen??
Auf der St seite ist für meinem µC diese Software gegeben...:/

abudhabi
Gast #2835250
Lesenswert?

> Ich hab mich mit PA0 und PA1 vertan..PA11 und PA12 habe ich genommen.
Okay, hab jetzt nicht geguckt, ob das die USB-Schnittstelle ist, ...

> Ich bekomme als meldung das ein unbekanntes USB gerät angeschlossen ist,
... aber das hört sich danach an :)

> obwohl die treiber software installiert ist...???
USB Vendor- und Product-ID stimmen mit dem Treiber überein?

> Kann ich auf stm32l discovery die Software vom stm32l Eval benutzen??
> Auf der St seite ist für meinem µC diese Software gegeben...:/
Prinzipiell würde ich sagen ja, allerdings würde ich vorher prüfen, was 
die Eval-Firmware macht (LEDs ansteuern, etc.) und vergleichen, ob die 
Ports bei dir ebenfalls auf LEDs gehen. Damit verhinderst du, dass was 
abraucht, wenn ansonsten ein Ausgang auf einen Ausgang gelegt würde.
Alternativ die Eval-Firmware soweit runterstrippen, dass nur noch der 
relevante VCP-Teil (den willst du ja) vorhanden ist.

Ralf
Gast #2835774
Lesenswert?

Hey,

die USB Vendor und Product-ID bei dem virtuellen com port ist:
(Programm USBView)

idVendor:           0x0000
idProduct:          0x0000
Alle anderen Werte werden auch als 0 gezeigt.

Ich habe die xx.inf datei vom Com port Treiber geändert und neu 
installiert, hat leider immer noch nichts gebracht. Es wird immer noch 
als Unknown Device gezeigt...Ich nehme an der Fehler liegt am Code??

abudhabi
Gast #2841064
Lesenswert?

hey @all,

mit der hilfe von einem Kumpel habe ich es endlich geschafft das problem 
zu lösen...ich stelle gerne meinen Code zur Verfügung wenn gewünscht!
Da ich nur als gast angemeldet bin werde ich gelegentlich auf der Seite 
vorbeischauen, d.h. wer meinen Code für den stm32l discovere VCP möchte 
kann hier schreiben und ich schicke den Code weiter.....

Danke für die leute die mir hier hilfen wollten :)

abudhabi

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