串口编程
我们在谈到“串口”的时候,往往还会提到 RS-232 、RS-485 等等,它们之间的关系是什么?
我们可能会用到 232 串口线、或者 422 串口线连接两个设备,但使用 Qt serial port 模块写软件不用考虑使用了哪种串口线,只需要关注收发两端的波特率、校验位、停止位等一致。
硬件
RS-232 是美国电子工业联盟制定的串行数据通信的接口标准,它广泛用于计算机串行接口外设连接。
它规定连接电缆和机械、电气特性、信号功能及发送过程。其他常用电气标准还有 RS-422-A、RS-423A、RS-485。
出于节省资金和空间的考虑,25 个管脚的 DB-25 连接器已经不常见,9 个管脚的 DB-9 型连接器被广泛使用。RS-232 中 DB-9 型连接器的信号和管脚分配:2-收,3-发,5-接地。
TODO 电气特性 RS-485
软件
使用 Qt 的串口库,拷贝其示例代码,然后根据业务稍作修改即可。
属性默认值:9600,8N1
- The default value is
Baud9600
, i.e. 9600 bits per second. - The default value is
Data8
, i.e. 8 data bits. - The default value is
NoFlowControl
, i.e. no flow control. - The default value is
NoParity
, i.e. no parity. - The default value is
OneStop
, i.e. 1 stop bit.
在 Linux 平台打开串口时,确保对目标设备拥有权限。建议使用以下接口判断
QSerialPort::SerialPortError error() const
QString QIODevice::errorString() const
如果报错权限问题:permission error while locking the device ,
试一试解决办法:删除 /var/lock/LCK..ttyS0
等类似文件。
工具
Windows 下常用的串口调试工具、窗口调试助手,在互联网上能够搜到很多。
可能是因为太简单,或者是定制性太强,并没有一款占据垄断地位的软件。
XShell 和 PuTTY 也支持串口,在调试嵌入式系统的时候就是用的 XShell。
但是 XShell 和 PuTTY 在发送十六进制、以十六进制查看字节上并未做支持,
只能迂回查看,Display Hex in PuTTY for Serial
目前使用的 Microsoft Store 中的“串口调试助手”,
但我要吐槽一句,其他助手 23兆,这款 6070兆的安装包,肯定有坑。
vspd
站在软件开发者的视角,如果每次调试业务时都需要把上下游的串口设备接上才能调试,
无疑是效率很低的,也是愚蠢的。所以我们要想办法甩开硬件串口来调试,我们需要
- 软件模拟串口设备,VSPD 虚拟串口工具
- 发送内容:有条件直接录取串口数据;没有条件就根据协议自行组装
minicom
linux 平台推荐 minicom ,也只推荐这一款工具。
虽然没有 GUI ,但其作为纯粹的命令行工具,也保证了更广泛的使用场景。
比如 SSH 远程访问在终端中执行,比如离线设备上安装 GUI 助手解决各种依赖很麻烦。
相比图形界面工具,minicom 有一点点的学习成本,但对于熟悉 linux 终端操作的开发者,十分钟上手,半小时熟练使用。
接收串口数据:以十六进制展示 -H
,自动换行 -w
,开启色彩 -c on
,
底部状态栏查看状态,按下 Ctrl-A Z
查看帮助,按下 Ctrl-A X
退出 minicom 。
1 | root@localhost 桌面]$ minicom -Hwc on |
串口发送:TODO