Forum: PC-Programmierung Einstiegsprobleme mit der seriellen Schnittstelle


von Er S. (casisto)


Angehängte Dateien:

Lesenswert?

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
von Vlad T. (vlad_tepesch)


Lesenswert?

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
von Er S. (casisto)


Lesenswert?

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.

von W.S. (Gast)


Lesenswert?

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.

von Lukas K. (carrotindustries)


Lesenswert?

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
Noch kein Account? Hier anmelden.