mikrocontroller.net

Forum: Compiler & IDEs gcc-linux baudrate ändern


Autor: fugitivus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moinmoin....

beschäftige mich seit ein paar tagen mit com-ports unter linux...
hab mir scho n wolf gegoogelt... ich finde meinen fehler nicht der 
compiler gibt nur n warning wegen der "alten" string deklerationen 
ansonsten nciht also kurz gesagt alles funktioniert nur leider kann ich 
die baudrate nicht verändern sie läuft immer auf 9600 soll aber in 
diesem fall höher werden...

hier der code:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <iostream>
//include <sys/wait.h>

#define RXBUFFERSIZE 254

int  comdesk;
char rxBuffer[RXBUFFERSIZE];

int initUart(char *portdesk,double baud,char *format)
{
   struct termios options;
   // Get the current options for the port...
   tcgetattr(comdesk, &options);
   // Set the baud rate...
   cfsetispeed(&options, B115200);
   cfsetospeed(&options, B115200);
   // Enable the receiver and set local mode(8N1)...
   options.c_cflag |= (CLOCAL | CREAD);
   options.c_cflag &= ~PARENB;
   options.c_cflag &= ~CSTOPB;
   options.c_cflag &= ~CSIZE;
   options.c_cflag |= CS8;
   // Set the new options for the port...
   tcsetattr(comdesk, TCSANOW, &options);
   // Open Com Port
   comdesk = open(portdesk, O_RDWR | O_NOCTTY | O_NDELAY);
   if (comdesk == -1)
   {
      perror("open_port: Unable to open /dev/ttyS0 - ");
   }
   else
   {
      fcntl(comdesk, F_SETFL, FNDELAY);
   }
   return (comdesk);
   //close(comdesk);
}

int uartRD(void)
{
   int in = read(comdesk, rxBuffer, RXBUFFERSIZE);
   rxBuffer[in] = 0x00;
   printf("data:%s\n", rxBuffer);
}

int uartWR(void)
{
   printf("write...\n", rxBuffer);
   write(comdesk, "Hallo Welt !!!", 14);
}

int main(void)
{
   initUart("/dev/ttyS1",B115200,"8N1");
   while(1)
   {
      uartRD();
      usleep(50000);
      uartWR();
   }
   return 0;
}

währe dankbar für jede form von hilfe
mfg fugitivus

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wäre dankbar für lesbare Sätze, so macht es keinen Spaß
zu lesen.

Autor: fugitivus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldige bitte !
Das nächte mal wirds besser.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon: vielleicht erst open(), und dann die
Attribute setzen?
So wie es oben steht, weiß Linux doch gar nicht, welche
Schnittstelle manipuliert werden soll.

Autor: fugitivus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke !
Da werd ich doch gleich mal gucken !

Autor: fugitivus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tja....
Wenn man nicht manchmal jemanden hat, der das Brett weck schiebt......
Danke für die schnelle Hilfe !

Autor: cnvgb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne jetzt genauer analysiert zu haben:

comdesk ist der Filehandler fuer die Schnittstelle. Diese bekommt aber 
Ihren Wert erst bei
   comdesk = open(portdesk, O_RDWR | O_NOCTTY | O_NDELAY);
zugewiesen. Demzufolge kann
   tcgetattr(comdesk, &options);
   // Set the baud rate...
   cfsetispeed(&options, B115200);
   cfsetospeed(&options, B115200);
noch gar nicht wissen, um welchen Filehandler es sich handelt.

Gast

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte.
Bretter nehme ich gerne weg, ich heize mit Holz.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie schon geschrubt:
>    tcgetattr(comdesk, &options);
..mach nichts anständiges nicht, weil comdesk noch uninitialisiert ist 
(kuckst Du manpage, da steht das drin dass das initilisiert sein muss - 
ergo die Reihenfolge in init..() umdrehen: erst öffnen (versuchen), dann 
Werte holen, dann Werte setzen, falls alles(!) erfolgreich war den 
Dekriptor zurückgeben, sonst wieder schließen und Fehler melden).

Abgesehen davon wäre es zweckmäßig die Rückgabewerte der Funktionen 
auszuwerten.. die sind nämlich extra dafür da um Fehler zu erkennen ;-)

HTH

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.