文章目录

  • 前言
  • 读取串口设备数据
  • 往串口设备写数据
  • 串口设备参数访问
  • 查看串口设备参数
  • 设置串口设备参数




前言

  串口设备是linux系统中最基本的设备之一,在嵌入式linux开发中几乎是必不可少的。由于串口使用简单、广泛,除了使用一路串口作为调试终端输出外,还会使用串口作为外部设备的连接总线。



  虽然串口是一个最简单的总线设备,在实际开发过程中,或多或少会遇到串口通信不上、数据错乱、意外掉线等问题。linux系统提供了完善的设备管理和调试工具,通过命令终端可实时监控串口数据流和调整串口设备参数。利用好这些工具可以快速定位串口相关问题,达到事半功倍。



读取串口设备数据

cat [tty device]

示例:

root@ubuntu:~# cat /dev/ttyUSB0 
Hello Word
Hello Word



往串口设备写数据

echo [data] > [tty device]

示例:

root@ubuntu:~# echo ABCD > /dev/ttyUSB0



串口设备参数访问

  • 波特率,9600、57600、115200等
  • 数据位,常用为8位
  • 停止位,与具体设备有关,常用的有1、1.5、2位停止位
  • 校验,包括奇校验、偶校验、无校验
  • 流控,一般设为无

查看串口设备参数

stty -F [tty device] -a

示例:

root@ubuntu:~# stty -F /dev/ttyUSB0 -a
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

  除了波特率参数,对于“-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts”,是我们关心的实际串口参数。

  • speed,波特率
  • cs8,8位数据位
  • parenb,偶校验
  • parodd,奇校验
  • cstopb,2位停止位
  • crtscts,硬件流控

  其中"-"表示未设置状态,因此该串口设备默认的参数是:9600bps波特率、8位数据位、无校验、1位停止位、无硬件流控。



设置串口设备参数

stty -F [tty device] [pararm0] [param1] […]

  命令后面接着的待设置串口参数不分先后顺序

  • 设置115200波特率、8位数据位、偶校验、2位停止位、无流控
root@ubuntu:~# stty -F /dev/ttyUSB0 115200 cs8 parodd cstopb
root@ubuntu:~# stty -F /dev/ttyUSB0 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb parodd -cmspar cs8 hupcl cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc



  • 去除设置,在参数前加"-";去除偶校验、2位停止位的设置
root@ubuntu:~# stty -F /dev/ttyUSB0 115200 cs8 -parodd -cstopb
root@ubuntu:~# stty -F /dev/ttyUSB0 -a
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>;
start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

注:
选择性参数更改时需失能已设置的参数,再使能新的参数。例如,先设置了偶校验,后需要更改为奇校验,则需失能偶校验,否则设置奇校验无效。

stty -F /dev/ttyUSB0 115200 cs8 -parodd parenb



  • 输入不支持的参数,会提示错误信息
root@ubuntu:~# stty -F /dev/ttyUSB0 115200 cs9 parodd
stty: invalid argument ‘cs9’
Try 'stty --help' for more information.