news 2026/2/3 13:14:50

树莓派串口通信引脚定义及用途:核心要点解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派串口通信引脚定义及用途:核心要点解析

树莓派串口通信实战指南:从引脚定义到稳定通信的完整路径

你有没有遇到过这样的情况——接好线、写好代码,树莓派却“收不到数据”?或者明明波特率设的是115200,结果读出来全是乱码?

别急。这些问题90%都出在串口配置和引脚理解不清上。

树莓派虽小,但它的串口系统远比表面看到的复杂。尤其是不同型号之间,UART控制器的分配方式天差地别。你以为连的是高速PL011,实际上用的却是受CPU调频影响的mini-UART——这正是许多开发者踩坑的根本原因。

本文不讲空话,带你穿透文档迷雾,搞清楚:
- GPIO 14 和 15 到底该接什么?
-/dev/ttyAMA0/dev/serial0究竟有什么区别?
- 为什么你的串口总在系统负载高时失灵?
- 如何真正启用一个稳定、可靠、可用于工业级通信的硬件串口?

我们一步步来。


一、先搞明白:树莓派到底有几个UART?

很多人以为,“串口就是TXD和RXD两根线”,但在树莓派内部,事情没那么简单。

两种UART,命运迥异

树莓派SoC(如BCM2837、BCM2711)集成了两类UART控制器:

类型名称特点
主力选手PL011 UARTARM标准外设,独立时钟源,波特率精准,支持FIFO与中断,性能强
备胎角色mini-UART轻量级定制模块,依赖核心时钟分频,易受GPU频率波动干扰

听起来像是“高级 vs 入门”的区别?没错。但问题在于:默认情况下,很多型号偏偏把GPIO引脚连到了那个“备胎”上。

📌 尤其是 Raspberry Pi 3 和 Pi 4:蓝牙模块出厂就占用了PL011 UART,导致GPIO只能退而求其次使用mini-UART!

这意味着什么?

👉 如果你在Pi 3B+上不做任何配置,即使你把GPS模块接到Pin 8/10,也跑在不稳定的基础上。一旦系统节能降频,通信立马出错。

这不是理论风险,而是真实项目中频繁发生的“幽灵故障”。


二、关键引脚:GPIO 14 和 GPIO 15,你真的会用吗?

这两个引脚位于40针排母的第8脚(TXD)和第10脚(RXD),对应BCM编号下的GPIO 14 (TXD0)GPIO 15 (RXD0)

它们是树莓派对外串行通信的“官方通道”。但我们得先确认一件事:

🔍 这两个引脚现在连的是哪个UART?

答案取决于你的设备树配置。

查看当前映射关系

打开终端,执行:

ls -l /dev/serial*

输出可能如下:

lrwxrwxrwx 1 root root 7 Jun 1 10:00 /dev/serial0 -> ttyS0

lrwxrwxrwx 1 root root 7 Jun 1 10:00 /dev/serial0 -> ttyAMA0

这里有玄机:

  • /dev/ttyAMA0→ 绑定的是PL011 UART
  • /dev/ttyS0→ 绑定的是mini-UART

所以如果你看到serial0 -> ttyS0,恭喜你,你现在正跑在一个随时可能飘移的串口上。


三、性能对比:PL011 vs mini-UART,差距有多大?

别被名字迷惑了,这不是“功能差不多,只是叫法不同”。二者本质差异极大。

对比项PL011 UARTmini-UART
时钟源独立晶振(~3MHz)分频自core_clock(随GPU动态变化)
波特率稳定性高精度,误差<1%易漂移,尤其在节能模式下
最大推荐速率可达 4 Mbps建议不超过 115200 bps
FIFO 缓冲区16字节仅8字节
是否适合长时间运行✅ 是❌ 否,负载变化易丢帧

举个例子:

假设你接了一个高精度GPS模块(NEO-M8N),要求持续以9600bps输出NMEA语句。
如果使用mini-UART,且系统进入低功耗状态,core_clock从250MHz降到100MHz,实际波特率就会偏离设定值——接收端采样错位,直接导致数据断裂、校验失败、定位丢失

这就是为什么有些项目白天正常,晚上突然“失联”。


四、实战配置:如何让GPIO 14/15 接上PL011?

目标明确:我们要把原本被蓝牙霸占的PL011释放出来,重新绑定到GPIO引脚。

第一步:修改设备树覆盖文件

编辑/boot/config.txt

# 启用UART硬件(防止GPU关闭电源) enable_uart=1 # 禁用蓝牙对PL011的占用 dtoverlay=disable-bt

保存后重启。

💡enable_uart=1是关键!否则即使有物理连接,内核也可能因节能策略关闭UART供电。

第二步:禁用蓝牙服务(可选但推荐)

避免后台进程抢资源:

sudo systemctl disable hciuart

第三步:验证是否成功切换

再次运行:

ls -l /dev/serial*

理想输出应为:

/dev/serial0 -> ttyAMA0

同时检查:

dmesg | grep uart

你应该能看到类似信息:

[ 0.000000] devtmpfs: mounted [ 0.001234] Serial: AMBA PL011 UART driver ... [ 1.234567] console [ttyAMA0] enabled

说明PL011已激活并接管主串口。


五、Python串口通信实战:别再盲目复制代码

有了正确的底层支持,下一步才是编程。

安装 pySerial

pip install pyserial

正确打开串口的方式

import serial import time ser = serial.Serial( port='/dev/serial0', # 永远优先用这个符号链接 baudrate=115200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1 # 设置合理超时,避免阻塞 ) try: while True: # 发送数据 ser.write(b'PING\n') # 读取响应 if ser.in_waiting > 0: data = ser.readline().decode('utf-8').strip() print(f"收到: {data}") time.sleep(1) except KeyboardInterrupt: print("退出") finally: ser.close()
关键细节提醒:
  1. 永远使用/dev/serial0
    它会自动指向系统主串口(无论是ttyAMA0还是ttyS0),更具移植性。

  2. 不要忘记权限设置
    将用户加入dialout组:

bash sudo usermod -aG dialout pi

  1. 关闭串口登录Shell!
    很多人忽略这一点:Raspberry Pi 默认开启串口控制台(Serial Console),用于调试启动过程。但它会占用串口,并打印大量日志干扰通信。

使用raspi-config关闭它:
sudo raspi-config → Interface Options → Serial Port → Login shell over serial? No → Would you like the serial port hardware to be enabled? Yes


六、避坑指南:那些年我们都踩过的“串口雷”

问题现象根本原因解决方法
收不到数据TX/RX 接反了记住:对方TX → 树莓派RXD(Pin 10)
数据乱码波特率不一致双方必须严格匹配,常见值:9600, 115200
断续通信使用mini-UART + CPU调频切换至PL011并设置enable_uart=1
打不开设备权限不足加入dialout组或使用sudo
串口启动时报错设备树冲突检查/boot/config.txt中是否有重复overlay

还有一个致命误区:

⚠️误以为所有3.3V设备都能直连

虽然树莓派是3.3V逻辑电平,但某些传感器或模组(如SIM800L)在发射瞬间会产生电压回涌,长期连接可能损坏GPIO。建议在关键项目中增加光耦隔离或专用电平转换芯片(如MAX3232、SP3232)。


七、典型应用场景:串口不只是“传字符串”

一旦打通这条稳定的数据通道,你能做的事远超想象。

场景1:接入工业PLC

通过Modbus RTU协议读取产线状态,实现边缘监控。

场景2:车载OBD-II诊断

连接ELM327芯片,实时获取车速、转速、故障码,构建行车记录仪。

场景3:农业物联网网关

多个土壤传感器通过RS485转UART汇聚至树莓派,统一上传云平台。

场景4:智能家居中枢

连接Zigbee协调器(如CC2530),将无线传感网络纳入Home Assistant生态。

这些场景的共同点是什么?

✅ 数据量不大
✅ 要求长期稳定运行
✅ 不允许轻易断连

而这,正是正确配置后的PL011 UART最擅长的领域


结语:掌握串口,才算真正入门嵌入式开发

树莓派的强大不仅在于能跑Linux、放视频、搭服务器,更在于它能深入物理世界,与各种设备“对话”。

而这场对话的起点,往往就是那两根不起眼的引脚:Pin 8 和 Pin 10

下次当你准备接上第一个传感器时,请记住:

  • 不要跳过设备树配置;
  • 不要忽视UART类型选择;
  • 更不要低估一个稳定波特率的价值。

因为真正的嵌入式系统,不是“能动就行”,而是“一年不重启也能稳如泰山”。

如果你正在做一个基于串口的项目,欢迎留言交流经验。也可以分享你在调试过程中遇到的“神坑”——我们一起填平它。


📌关键词回顾:树莓派串口通信、UART、GPIO 14、GPIO 15、TXD、RXD、PL011 UART、mini-UART、/dev/ttyAMA0、/dev/serial0、波特率、设备树、enable_uart、raspi-config、pySerial、电平转换、串口调试、异步通信、Linux串口驱动

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 11:28:01

VnPy连接SimNow终极排错指南:5步解决4097错误

VnPy连接SimNow终极排错指南&#xff1a;5步解决4097错误 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy 作为基于Python的开源量化交易平台开发框架&#xff0c;VnPy在连接SimNow模拟交易环境时&#xff0c;经常…

作者头像 李华
网站建设 2026/2/2 7:33:54

IMX296 CMOS图像传感器技术手册深度解析

IMX296 CMOS图像传感器技术手册深度解析 【免费下载链接】IMX296规格书分享 本资源提供了Sony IMX296图像传感器的数据手册。IMX296是一款高性能CMOS图像传感器&#xff0c;广泛应用于高端摄影、监控系统、医疗成像以及工业自动化等领域。此数据手册包含了传感器的关键技术参数…

作者头像 李华
网站建设 2026/1/30 13:03:19

元宇宙场景构建:TensorFlow三维姿态估计应用

元宇宙场景构建&#xff1a;TensorFlow三维姿态估计应用 在虚拟偶像直播中&#xff0c;主播只需站在摄像头前&#xff0c;无需穿戴任何传感器&#xff0c;其每一个手势、转身甚至细微的头部动作都能实时映射到数字分身上——这种看似科幻的交互体验&#xff0c;正随着元宇宙技术…

作者头像 李华
网站建设 2026/1/29 19:45:21

Open-AutoGLM能做什么(90%开发者不知道的AI编码黑科技)

第一章&#xff1a;Open-AutoGLM能做什么?Open-AutoGLM 是一个开源的自动化语言模型推理框架&#xff0c;专为优化大语言模型在复杂任务中的执行流程而设计。它结合了提示工程、工具调用与动态工作流编排能力&#xff0c;使开发者能够高效构建可复用、可扩展的智能应用系统。自…

作者头像 李华
网站建设 2026/1/29 23:16:03

TensorFlow SavedModel格式详解:模型持久化最佳方式

TensorFlow SavedModel格式详解&#xff1a;模型持久化最佳方式 在构建一个AI系统时&#xff0c;最让人焦虑的时刻之一&#xff0c;往往不是训练不收敛&#xff0c;而是当模型终于跑出理想指标后——却发现无法顺利部署到生产环境。你是否曾遇到过这样的窘境&#xff1a;本地训…

作者头像 李华
网站建设 2026/2/2 1:51:58

终极动漫下载加速方案:简单三步让死链重获新生 [特殊字符]

终极动漫下载加速方案&#xff1a;简单三步让死链重获新生 &#x1f680; 【免费下载链接】animeTrackerList 动漫磁性链接加速方案&#xff08;animeTrackerList&#xff09; 项目地址: https://gitcode.com/GitHub_Trending/an/animeTrackerList 还在为动漫资源下载速…

作者头像 李华