树莓派3重新映射UART0至GPIO36/37后串口通信故障排查求助
解决树莓派3 UART0映射到GPIO36/37后无法通信的问题
首先看你给出的dtoverlay配置,发现了一个明显的拼写错误——这大概率是导致通信失败的核心原因:
- 你写的
txd0_pin36格式错误,正确参数应该是txd0_pin=36 - 还有
rxdo_pin=37里的rxdo是笔误,正确应为rxd0_pin=37
先修正这个配置,再按以下步骤排查和调整:
1. 修正config.txt中的UART覆盖配置
打开/boot/config.txt(树莓派OS Bullseye及之后版本路径为/boot/firmware/config.txt),替换原有配置为:
dtoverlay=uart0,txd0_pin=36,rxd0_pin=37,pin_func=7
这里pin_func=7对应ALT3功能,树莓派3的GPIO36和37的ALT3确实是TXD0和RXD0,这个参数是正确的。
2. 禁用串口控制台(关键步骤)
默认情况下,树莓派的UART0可能被绑定到系统控制台,即使重新映射了引脚,控制台占用也会导致串口无法正常用于数据通信。需要禁用该功能:
- 打开
/boot/cmdline.txt,移除所有包含console=serial0,115200或console=ttyAMA0,115200的内容 - 保存文件后重启系统
3. 优化rc.local的引脚配置
你在rc.local里设置GPIO14和15为输入是合理的,还可以补充对GPIO36/37的功能确认,确保配置生效:
在rc.local的exit 0之前添加:
raspi-gpio set 36 a3 pu raspi-gpio set 37 a3 pu raspi-gpio set 14 ip raspi-gpio set 15 ip
其中a3表示设置为ALT3功能,pu是启用上拉电阻,避免引脚浮空带来的干扰。
4. 验证串口映射和状态
重启后执行raspi-gpio get,确认:
- GPIO36显示
TXD0(功能为ALT3) - GPIO37显示
RXD0(功能为ALT3) - GPIO14和15显示
INPUT
再执行ls -l /dev/serial*,确认/dev/serial0链接到/dev/ttyAMA0(树莓派3中UART0对应ttyAMA0,蓝牙模块占用了ttyS0)。
5. 测试串口通信
可以用以下命令测试收发功能:
- 发送测试:
echo "test" > /dev/serial0 - 接收测试:先让外部设备发送数据,再执行
cat /dev/serial0查看是否能接收到内容
如果还是无法通信,检查硬件连接:
- 确保GPIO36(TXD0)连接到外部设备的RX引脚,GPIO37(RXD0)连接到外部设备的TX引脚
- 确认电平匹配(树莓派为3.3V,不要连接5V设备)
- 检查地线是否连接牢固
内容的提问来源于stack exchange,提问作者Aayushi kothari
相关产品推荐
相关产品推荐

