Hallo zusammen, Ich habe ein Stückcode geschrieben um einen seriellen Port zu öffnen, Daten zu schicken und anschliessen der Port zu schliessen. Es funktioniet alles bis auf das Ein/Umstellen der Baudrate. Laut mehre Docus und Toturien sollte die Baudrate wie folgt geaendert werden: cfsetispeed(&options, B115200); 0der: cfsetspeed(&options, B115200); Oder: cfsetospeed(&options, B115200); Der Compiler meldet Erfolg. Nach Abfrage der aktuellen Baudrate per Terminal, stellt sich fest, dass die o. Methoden wirkungslos waren. Es kommen zwar Daten an, diese sehen beim Eintreffen etwas exotischer aus als wie sie geschickt wurden. Ich wäre für eure Hilfe sehr dankbar!!!! Hier ist etwas Mehr Code: int main(int argc, char *argv[]) { int OpenRet = OpenSerialPort(0); struct termios options; if (OpenRet != -1) { options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // folgende 3 Methode funktionieren weder einzeln noch zusammen cfsetispeed(&options, B115200); cfsetspeed(&options, B115200); cfsetospeed(&options, B115200); for (int j=0; j<100; j++) { int WriteRet = WriteOnSerialPort(OpenRet, 8); } CloseSerialPort(0); } cout << " \n Mainende erreicht \n" << endl; return EXIT_SUCCESS; }
[quote] if (OpenRet != -1) { options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // folgende 3 Methode funktionieren weder einzeln noch zusammen cfsetispeed(&options, B115200); cfsetspeed(&options, B115200); cfsetospeed(&options, B115200); for (int j=0; j<100; j++) { int WriteRet = WriteOnSerialPort(OpenRet, 8); } [/quote] ..da fehlt noch sowas wie tcgetattr() davor und tcsetattr danach :-)
Danke erstmal für die schnelle Antwort. Ich habe die beiden Methoden hinzugefuegt. Das Ergebnis ist leider nach wie vor das selbe. Info: Die Attribute c_ispeed c_ospeed wechslen ihre Werte von 15 auf 9 im Laufe des Debuggens. Die Baudrate ändert sich jedoch nicht. Auf weiteren Tipps würde ich mich freuen.
> int a= tcgetattr (0, &options); // 1. hinzugefuegte Funktion ^ > a= tcsetattr(0,TCSANOW, &options); // 2. hinzugefuegte Funktion ^ FD 0 ist i.d.R. nicht wirklich die Serielle :-) Pack da mal den richtigen Deskriptor rein.
Ich muss gestehen. Ich verstehe nicht was du meinst.
Jetzt checke ich was du meinst. Ich bin der Meinung, dass "fd" der Port entspricht. In dem Fall Port 0 oder dev/ttyS0
Der Deskriptor, der da hingehört, das ist der, den Du von open() zurückbekommen hast, also sowas wie
1 | int fd = open(..); |
2 | tcgetattr(fd, ..); |
Ich muss mein Kommentar zurück nehmen. Du hast völlig recht. fd ist der Rückparameter von der open-Funktion. Jetzt funktioniert!!
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.