www.mikrocontroller.net

Forum: PC-Programmierung Einstellen der Baudrate eines seriellen Ports RS232 c_Linux


Autor: Younes Mayer (younes)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Younes Mayer (younes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Younes Mayer (younes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss gestehen. Ich verstehe nicht was du meinst.

Autor: Younes Mayer (younes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt checke ich was du meinst.

Ich bin der Meinung, dass "fd" der Port entspricht.
In dem Fall Port 0 oder dev/ttyS0

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Deskriptor, der da hingehört, das ist der, den Du von open() 
zurückbekommen hast, also sowas wie
int fd = open(..);
tcgetattr(fd, ..);

Autor: Younes Mayer (younes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss mein Kommentar zurück nehmen.
Du hast völlig recht.
 fd ist der Rückparameter von der open-Funktion.

Jetzt funktioniert!!

Autor: Younes Mayer (younes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
besten Dank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.