文章目录
- 前言
- 读取串口设备数据
- 往串口设备写数据
- 串口设备参数访问
- 查看串口设备参数
- 设置串口设备参数
前言
串口设备是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.