需求

在编程使用串口之前,希望先确定串口硬件和系统层面是否正常。

解决

可以使用 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 也不行。

参考

【Tools】Linux串口设备调试技巧(sftty)

linux下查看与设置串口(或串口终端)信息和属性

Linux stty 指令设置串口参数

100分!linux串口通信(cat /dev/ttyS0)问题!

linux 命令行操作串口

linux下通过shell命令测试串口

在linux使用命令配置串口

Linux 查看本机串口方法