树莓派3B+ UART通信报错求助:写入/dev/ttyS0权限及输入输出错误
解决树莓派3B+ UART写入权限与IO错误问题
1. 确认设备节点是否正确
树莓派3B+有两个UART:
/dev/ttyAMA0:硬件UART(性能稳定),默认被蓝牙模块占用/dev/ttyS0:mini UART(性能受限)
如果用GPIO14(TX)/15(RX)做串口通信,得先把硬件UART分配给GPIO引脚:
- 执行
sudo raspi-config - 选
Interface Options->Serial Port - 第一个问题"Would you like a login shell to be accessible over serial?"选No
- 第二个问题"Would you like the serial port hardware to be enabled?"选Yes
- 重启树莓派后,硬件UART会绑定到
/dev/ttyAMA0,此时用这个节点而非/dev/ttyS0
2. 确保组权限生效
虽然你已加入dialout组,但得注销当前用户再重新登录,组权限才会生效。不想注销的话,可以临时用sudo echo "Hello" > /dev/ttyAMA0测试,但别长期用sudo操作串口。
3. 检查串口参数匹配
TTL-USB适配器和树莓派的串口参数必须完全一致(默认一般是115200波特率、8位数据位、无校验、1位停止位):
- 查询当前串口参数:
stty -F /dev/ttyAMA0 - 手动设置参数:
sudo stty -F /dev/ttyAMA0 115200 cs8 -cstopb -parenb
4. 排查硬件连接问题
IO错误大概率和硬件有关:
- 必须交叉连接TX/RX:笔记本TTL适配器的TX接树莓派的RX(GPIO15),适配器的RX接树莓派的TX(GPIO14)
- 务必连GND引脚,否则电平不稳定会出IO错误
- 检查线缆是否损坏,TTL适配器是否正常供电
5. 禁用串口控制台冲突
如果UART被配置为控制台,直接写入会冲突:
- 执行
ls /dev/serial*,若看到serial0链接到ttyAMA0,说明控制台还在占用 - 编辑
/boot/config.txt,添加或修改:enable_uart=1 dtoverlay=pi3-disable-bt - 重启树莓派后,蓝牙被禁用,硬件UART完全分配给GPIO引脚
内容的提问来源于stack exchange,提问作者MatanCode
相关产品推荐
相关产品推荐

