需求
在编程使用串口之前,希望先确定串口硬件和系统层面是否正常。
解决
可以使用 stty
来调试串口功能。
查询当前串口配置
sudo stty -aF /dev/ttyS0
- 上面这个命令可以打印出当前串口的所有配置,有些配置选项前面有
-
, 这个表示关闭此选项,或者额外意义,具体可以参考手册man stty
. - 需要注意这几个配置:
speed
,-parenb
,cs8
,-cstopb
,-ixon
,-ixoff
,-echo
. 表示: 波特率,关闭校验,8位,1位停止,无流控,无回显.
保存,读取当前配置
在进行串口配置之前,应该先保存现在配置,便于以后的恢复。
# 保存
sudo stty -gF /dev/ttyS0 > save_stty
# 读取
sudo stty -F /dev/ttyS0 $(cat save_stty)
脚本中可以这样写:
save_stty="$(stty -g)"
...
stty $save_stty
配置串口
sudo stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb -ixon -echo
上面这条命令立即生效,即使已经使用 cat
读取串口数据。
读取数据
sudo cat /dev/ttyS0
*注意: *
- 串口调试助手一定一定要可以输入回车,或者可以勾选发送时自动增加回车选项,否则没有
\n
,cat
是一点数据都不会显示的。 - 如果配置中没有
-echo
, 并且发送时无回车,那么就会出现很蛋疼的情况,首先 linux 这边因为没有回车cat
无显示,然后因为有回显,所以串口调试助手会受到一些数据,但是如果其他配置也没有配好,那么这些收到的数据就会是乱码,会误导是串口硬件问题。
发送数据
echo "xyz" > /dev/ttyS0
上面这条命令可以发送指令,但是需要在 root
权限才行,否则就算增加
sudo
也不行。