Hallo Forum, ich bin momentan dabei ein Programm zu schreiben welches mit einem µC (MSP430) kommunizieren soll. Als PC-Ausgang soll dabei USB verwendet werden, als µC Eingang UART. Zu diesem Zwecke ist zwischen den beiden ein FT232RL verbaut. Mit HTerm funktioniert die Kommunikation (beidseitig, also PC sendet und empfängt). Ich versuche die Kommunikation aber in einem eigenen C-Programm zu schreiben, da ich die empfangenen Daten weiterverarbeiten muss und das mit HTerm nicht in gewünschter Weise möglich ist. Im Anhang habe ich meine ersten 3 Versuche dargestellt. Ich hoffe ihr könnt mich auf meinen Fehler hinweisen und Lösungsvorschläge geben. Zum Fehlerbild: Ich bekomme kryptische Antworten (beim Zeichenweise auslesen ist alles dabei zwischen 0 und ffffffff, der PC versucht mich auch mit Smileys zu beruhigen (hex = 02) ;-) ). Das Programm sollte OS unabhängig sein, darum habe ich die Standardlibs nur eingebunden und weder <windows.h> noch <unistd.h> benutzt. Zu den Anhängen: orig.c: Das war der erste Versuch c_kom_t1.c: Der erste Versuch überarbeitet c_kom_t2.c: orig.c wurde überarbeitet um fopen einmal als read und einmal als write auszuführen, allerding ist es beim read sehr still geworden...
:
Bearbeitet durch User
also hat dein Problem nix mit usb zu tun, sondern mit "wie benutze ich die serielle schnittstelle" Ich hatte hier mal eine kleine lib eingestellt, die ich mir für meine Bedürfnisse gebaut hatte und sowohl auf der Fritzbox, als auch am PC funktionierte: Beitrag "PortableSerialLib - Portable Serial Port Library" (weiter unten ist eine neuere Version und ganz unten noch ein patch)
:
Bearbeitet durch User
Hallo Vlad, ich habe deinen Code bis jetzt nur überflogen, werde aber morgen auf jedenfall auf Basis deiner Arbeit meinen eigenen Code anpassen bzw. wahrscheinlich nochmal komplett neu schreiben.
Er Se schrieb: > Ich versuche die Kommunikation aber in einem eigenen C-Programm zu > schreiben,... ja, dein Code zum Öffnen des Ports sieht lausig aus. Ich poste dir mal nen funktionierenden Code, allerdings in Pascal. Aber das Essentielle solltest du daraus erkennen können. { Opens the COM port, returns True if ok } function TComPort.Open: Boolean; var sCom : String; begin result:= false; { close port if open already } if hPort <> INVALID_HANDLE_VALUE then Close; { try to open the port } if nPort>=10 then sCom := '\\.\COM' + IntToStr(nPort) else sCom := 'COM' + IntToStr(nPort); hPort := CreateFile(PChar(sCom), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, LongInt(0)); if hPort = INVALID_HANDLE_VALUE then exit; { set the baud rate and other parameters } if GetCommState(hPort, dcbPort) then begin { fill in the fields of the structure } dcbPort.BaudRate := lBaud; dcbPort.ByteSize := 8; dcbPort.Parity := NOPARITY; dcbPort.StopBits := ONESTOPBIT; SetCommState(hPort, dcbPort); end; { return True if handle is valid } result := (hPort <> INVALID_HANDLE_VALUE); end; W.S.
Muss es unbedingt C sein? Für Python gibt's da pyserial¹. Da sieht das dann so aus
1 | import serial |
2 | ser = serial.Serial("COM0", 9600) |
und schon ist Port offen. Einfach, oder...? [1] http://pyserial.sourceforge.net/shortintro.html
:
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.