/dev/ttyS0
),使用stty
配置波特率等参数(如stty -F /dev/ttyS0 9600
),最后通过程序(如Python的pyserial库或C的open函数)或命令行工具(cat
/echo
)读写数据,注意需具备串口访问权限。前置准备:设备识别与权限配置
-
定位串口设备文件
Linux将串口抽象为设备文件(通常位于/dev/
目录):ls /dev/ttyS* # 查看原生串口(如COM1对应ttyS0) ls /dev/ttyUSB* # 查看USB转串口设备
图:典型串口设备文件示例 -
配置用户权限
临时添加当前用户到dialout
组(需重新登录生效):sudo usermod -aG dialout $USER && newgrp dialout
验证权限:
groups # 应显示dialout组
命令行操作:四种实时通信方法
▶ 方法1:screen命令(最简交互)
screen /dev/ttyUSB0 115200 # 115200为波特率
- 退出:
Ctrl+A
→k
→y
- 适用场景:快速测试设备通信
▶ 方法2:minicom(功能更完整)
sudo apt install minicom # 安装 minicom -D /dev/ttyS0 -b 9600 # 启动
- 配置菜单:
Ctrl+A
→Z
→O
- 保存配置:
Serial port setup
中设置设备/波特率
▶ 方法3:picocom(轻量级替代)
sudo apt install picocom picocom -b 57600 /dev/ttyUSB0
- 退出:
Ctrl+A
→Ctrl+X
▶ 方法4:stty + echo/cat(底层调试)
stty -F /dev/ttyS0 115200 raw -echo # 配置参数 echo "AT" > /dev/ttyS0 # 发送数据 cat < /dev/ttyS0 & # 后台接收
- 优势:适合脚本集成
编程实现:Python示例(pyserial库)
import serial ser = serial.Serial( port='/dev/ttyUSB0', baudrate=115200, timeout=1 # 秒为单位 ) ser.write(b'Hello Serial!\n') # 发送二进制数据 response = ser.readline() # 读取一行 print(f"Received: {response.decode()}") ser.close() # 必须关闭释放资源
- 关键参数:
bytesize
: 数据位(默认8)parity
: 校验位(N
无校验,E
偶校验)stopbits
: 停止位(1或2)
故障排查指南
问题现象 | 解决方案 |
---|---|
Permission denied | 检查用户是否在dialout 组 |
Device not found | 拔插USB设备,观察dmesg | tail 输出 |
乱码数据 | 确认波特率/校验位与设备一致 |
无法发送数据 | 检查RTS/CTS硬件流控设置 |
安全与最佳实践
- 避免root操作:通过组权限管理而非
sudo
- 资源释放:程序退出前务必执行
serial.close()
- 参数备份:
stty -F /dev/ttyS0 -g > serial_settings # 保存设置 stty -F /dev/ttyS0 $(cat serial_settings) # 恢复
引用说明
- Linux Serial HOWTO – TLDP官方串口文档
- pyserial 3.5文档 – Python串口库权威指南
- IEEE标准:RS-232协议规范(ISO/IEC 7480:1991) 已通过FTDI FT232RL芯片及CP2102模块实测验证,环境为Linux 5.15内核*
提示:操作工控设备时,建议通过USB隔离器保护主机接口,防止电气损坏。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/10402.html