Einstellen der Baudrate eines seriellen Ports RS232 c_Linux

OP #1816534
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
[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 :-)
OP #1816754
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
> 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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.