Einstellen der Baudrate eines seriellen Ports RS232 c_Linux

#1816534
Lesenswert?

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;
}
Gast #1816550
Lesenswert?

[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 :-)
#1816754
Lesenswert?

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.
Angehängte Dateien:
Gast #1816787
Lesenswert?

> 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.

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