Wie setze ich eine benutzerdefinierte Baudrate auf Linux?
Ich kommunizieren will, über meine serielle Schnittstelle unter Linux, um ein Gerät mit nicht-standard-baud-rate, die nicht definiert in termios.h
.
Ich habe versucht, die "Baudrate aliasing"-Methode von dieser Beitragaber wenn ich ausführen, mein C-Programm (ich habe es mit dem Namen "Testprogramm"), Linux sagt "testprogram sets custom speed on ttyS0. This is deprecated."
Habe ich einige Suche auf Google, und es scheint, dass es eine andere (neuere?) Methode zum ändern der baud-rate auf eine nicht-standard-Wert: Auf http://sourceware.org/ml/libc-help/2009-06/msg00016.html der Autor sagt, dass die c_flag
von struct termios
werden muss ODER würde mit BOTHER (=CBAUDEX | B0)
. Mit dieser Methode wird die baud-raten direkt in den c_ispeed
und c_ospeed
-Mitglieder der struct termios
. Allerdings weiß ich nicht, wie ich diese Methode in meinem C-Programm. Wie der Autor sagte, es gibt keine BOTHER
definiert/verfügbar, wenn ich termios.h
also, was sollte getan werden, um die Baudrate einzustellen, auf diese Weise?
Wie kann ich die baud-rate auf eine nicht-standard-Wert ohne änderung der kernel?
InformationsquelleAutor der Frage Felix | 2012-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bemerkte die gleiche Sache über die MÜHE nicht definiert wird. Wie Jamey Sharp sagte, Sie können es finden in
<asm/termios.h>
. Nur eine Vorwarnung, ich glaube, ich lief in Probleme, einschließlich beide und die regelmäßige<termios.h>
Datei zur gleichen Zeit.Abgesehen davon, fand ich mit der glibc habe ich es immer noch nicht funktioniert hat, weil glibc ist tcsetattr war dabei der ioctl-Aufruf für die old-style-version von struct termios, die nicht zahlen Aufmerksamkeit auf die Einstellung der Geschwindigkeit. Ich war in der Lage, um einen benutzerdefinierten Geschwindigkeit durch manuelles tun einen ioctl mit dem neuen Stil termios2 struct, der sollte auch verfügbar sein, darunter
<asm/termios.h>
:InformationsquelleAutor der Antwort dougg3
Können Sie eine benutzerdefinierte Baudrate mit der
stty
Befehl unter Linux. Zum Beispiel, um eine benutzerdefinierte Baudrate von 567890 auf Ihrem seriellen port /dev/ttyX0, verwenden Sie den Befehl:InformationsquelleAutor der Antwort manav m-n
dougg3 hat dies ziemlich viel (kann ich nicht Kommentar dort). Die wichtigste zusätzliche Sache, die Sie wissen müssen, ist, die überschriften, die nicht im Konflikt zueinander, sondern stellen die richtigen Prototypen. Die Antwort ist
Nach, die Sie verwenden können dougg3 code, vorzugsweise mit der Fehlerüberprüfung Runde der ioctl () - Aufrufe. Sie werden wahrscheinlich brauchen, um diese in einem separaten .c-Datei, um den rest Ihres serial port code verwendet die normalen termios zum festlegen anderer Parameter. Dabei POSIX-Manipulationen zuerst, dann die eigene Geschwindigkeit, funktioniert einwandfrei über den eingebauten UART des Raspberry Pi zu bekommen 250k baud-rate.
InformationsquelleAutor der Antwort RichardAshAudacity
BOTHER
erscheint ab<asm/termios.h>
auf Linux. Ziehen Sie die definition von dort aus wird das Wild nicht tragbar, aber ich nehme an, diese API ist nicht tragbar sowieso, also ist es wohl kein großer Verlust.InformationsquelleAutor der Antwort Jamey Sharp
Es ist eine serielle I/O-chip auf dem motherboard, die CPU (16650 UART).
Dieser chip verwendet 8-bit-port als Steuer-und Daten-bus, und damit können Sie einen Befehl, um es durch das schreiben dieser chip durch die Kontroll-und Daten-bus.
In der Regel eine Anwendung hast die folgenden Schritte auf dem seriellen port
Kurz gesagt, können Sie die baud-rate nur in der STTY-Befehl, und dann alle anderen Optionen würden gehalten werden, als Standard, und es sollte genug an andere Geräte.
InformationsquelleAutor der Antwort Houcheng
Für Mac-user (vielleicht auch für einige Linux-Distributionen)
InformationsquelleAutor der Antwort varatis