Linux串口波特率设置是硬件通信基础,关系数据传输稳定性,操作涵盖临时调整、永久配置及验证方法,确保设备间正常通信。
查看当前串口配置
-
确定串口设备路径
串口设备通常位于/dev/ttyS*
(物理串口) 或/dev/ttyUSB*
(USB转串口),使用命令扫描设备:dmesg | grep tty # 查看系统识别的串口 ls /dev/ttyS* # 列出物理串口 ls /dev/ttyUSB* # 列出USB转串口
-
检查当前波特率
使用stty
命令查看配置(以/dev/ttyS0
为例):stty -F /dev/ttyS0 -a # 输出内容中 "speed" 即当前波特率
临时设置波特率(重启失效)
通过 stty
命令直接修改:
sudo stty -F /dev/ttyS0 115200 # 将波特率设置为115200
关键参数说明:
-F
:指定设备文件115200
:目标波特率(常用值:9600, 19200, 38400, 57600, 115200)
永久设置波特率(重启生效)
方法1:通过systemd服务(推荐)
-
创建服务配置文件:
sudo nano /etc/systemd/system/serial-setup.service
-
写入以下内容(以115200波特率为例):
[Unit] Description=Set UART Baud Rate After=syslog.target [Service] Type=oneshot ExecStart=/usr/bin/stty -F /dev/ttyS0 115200 RemainAfterExit=yes [Install] WantedBy=multi-user.target
-
启用服务:
sudo systemctl daemon-reload sudo systemctl enable --now serial-setup.service
方法2:通过udev规则(设备插拔时生效)
- 创建规则文件:
sudo nano /etc/udev/rules.d/99-serial-baud.rules
- 添加规则(以USB串口为例):
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", RUN+="/bin/stty -F /dev/%k 115200"
- 替换
idVendor
/idProduct
:通过lsusb
命令查询设备ID
- 替换
- 重载规则:
sudo udevadm control --reload-rules
验证配置
-
检查设置结果:
stty -F /dev/ttyS0 -a | grep speed # 输出应为 "speed 115200 baud"
-
使用工具测试通信:
- minicom:
sudo apt install minicom minicom -D /dev/ttyS0 -b 115200 # 进入交互界面发送数据
- screen:
sudo screen /dev/ttyS0 115200 # 按 Ctrl+A 后输入 :quit 退出
- minicom:
常见问题解决
-
权限不足:
sudo usermod -aG dialout $USER # 将用户加入dialout组 reboot # 重启生效
-
波特率不支持:
- 检查硬件支持范围:
cat /proc/tty/driver/serial
- 确保设备未占用:
lsof /dev/ttyS0
- 检查硬件支持范围:
-
配置未生效:
- 关闭硬件流控:
stty -F /dev/ttyS0 -crtscts
- 检查引脚冲突:确认RXD/TXD接线正确
- 关闭硬件流控:
技术原理说明
串口波特率是每秒传输的符号数(symbol/s),需通信双方严格匹配,Linux通过内核驱动管理串口参数,stty
命令底层调用 termios
API(TCSETS
ioctl)修改 struct termios
结构体中的 c_cflag
波特率位域,驱动将参数写入UART硬件寄存器。
引用说明:
- Linux
stty
手册页:man 1 stty
- termios编程规范:IEEE Std 1003.1 (POSIX.1)
- udev规则语法:
man 7 udev
- systemd服务配置:
man systemd.service
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8090.html