广州市网站建设_网站建设公司_导航易用性_seo优化
2026/1/5 19:42:17 网站建设 项目流程

树莓派串口通信实战:从插针定义到稳定连接的完整指南

你有没有遇到过这样的情况?
刚把树莓派和STM32用杜邦线连上,烧录好代码,满怀期待打开串口助手——结果屏幕一片空白。再一查,发现树莓派的GPIO口居然发热了……

别急,这多半不是硬件坏了,而是UART接错了

在嵌入式开发中,串口通信(UART)是最基础、也最容易“翻车”的环节之一。尤其对初学者来说,面对树莓派那40个密密麻麻的引脚,稍不注意就会把TX接到TX,或者误将5V信号直连3.3V引脚,轻则通信失败,重则烧毁IO口。

本文将带你彻底搞懂:树莓派上的UART到底怎么用?哪些引脚能用?如何安全连接外部设备?程序又该怎么写?

我们不讲空理论,只聚焦实战细节,一步步拆解从物理接线到代码通信的全过程。


为什么是UART?它凭什么不可替代?

先问一个问题:I²C、SPI、USB、网络都能传数据,为啥还要用UART?

因为——它简单、可靠、调试友好

想象一下,你的树莓派系统突然无法启动,SSH连不上,显示器也没输出。这时候,如果没接串口,你就像个盲人摸象;但只要接上UART,就能看到完整的Bootloader日志、内核启动信息、登录提示……所有关键线索一目了然。

这就是UART的核心价值:它是系统的“生命线”

而且,相比其他协议:

  • I²C虽然省线,但距离短、易受干扰,且需要上拉电阻;
  • SPI速度快,但接线复杂,主从结构固定;
  • USB转TTL看似方便,实则引入额外芯片和驱动依赖。

而UART呢?两根数据线 + 一根地线,三点连线,即可实现全双工通信。命令行交互、日志输出、MCU协同——它几乎贯穿了整个嵌入式开发流程。


树莓派上的UART引脚,到底在哪?

树莓派4B、3B+等主流型号都配有40针GPIO排针。虽然外观统一,但很多人栽在了一个致命误区:混淆物理引脚号和BCM编号

两种编号,千万别搞混!

类型特点使用场景
物理引脚号(Pin Number)从1开始顺序编号,按位置数就行接线时对照实物
BCM GPIO编号SoC内部逻辑编号,编程必须用这个写代码、配置设备树

比如:
-物理Pin 8→ 对应BCM GPIO14
-物理Pin 10→ 对应BCM GPIO15

这两个就是我们要找的UART核心引脚。

UART关键引脚一览

功能BCM编号物理引脚方向说明
TXD(发送)GPIO14Pin 8树莓派向外发数据
RXD(接收)GPIO15Pin 10树莓派接收外部数据
GND——Pin 6 / 9 / 14 / 20 等必须共地!

📌 记住一句话:Pin 8 是 TX,Pin 10 是 RX
你可以把它贴在开发板旁边,避免每次都要查文档。

⚠️ 常见错误:把树莓派的TX接到另一块开发板的TX。这是典型的“同极相连”,等于两个人对着喊话却没人听——自然没法通信。


实际怎么接?三步搞定交叉连接

UART通信的基本规则就一条:发送对接接收,接收对接发送

具体接法如下:

[树莓派] [目标设备(如STM32/Arduino)] Pin 8 (TX) ─────────────→ RX Pin 10 (RX) ←───────────── TX Pin 6 (GND) ────────────── GND

✅ 正确姿势:
- 树莓派发送 → 对方接收
- 树莓派接收 ← 对方发送
- 双方共地

❗ 绝对禁止:
- TX 接 TX
- RX 接 RX
- 不接GND

尤其是最后一点:没有共地,就没有通信。即使两边电源独立,也必须通过GND建立参考电平,否则信号会漂移,导致误码甚至损坏接口。


电平不匹配?小心3.3V遇上5V!

树莓派的GPIO工作电压是3.3V TTL电平,最大耐压约3.6V。而一些老款Arduino(如Uno)、某些传感器模块使用的是5V逻辑。

如果你直接把5V的TX接到树莓派的RX(Pin 10),相当于给一个只能承受3.6V的引脚加了5V电压——轻则通信异常,重则永久性损坏SoC

怎么办?两个解决方案:

方案一:使用电平转换模块(推荐)

买一块基于TXS0108EHX711常用双向电平芯片的转换板,成本几块钱,支持多通道自动电平转换,安全又省心。

接法示例:

[5V MCU] TX → LV1 → HV1 → [Level Shifter] → HV2 → RV2 → Pi_RX (GPIO15) ↑ ↓ 3.3V 5V

这类模块可以双向通信,完全透明传输,适合长期项目。

方案二:电阻分压法(临时应急)

如果只是单向接收5V信号(例如MCU→Pi),可以用两个电阻做一个简单的分压电路:

MCU_TX ──┬───[4.7kΩ]───→ Pi_RX │ [10kΩ] │ GND

计算一下:
分压比 = 10 / (4.7 + 10) ≈ 0.68
5V × 0.68 ≈ 3.4V,在安全范围内。

⚠️ 注意:此方法仅适用于单向通信,且不能反向驱动5V设备。长期使用建议还是用电平转换模块。


软件准备:让UART真正可用

你以为插上线就能通?不一定。默认情况下,树莓派的UART可能被系统占用,用来输出启动日志。

这意味着:你的Python程序根本抢不到串口资源

必须手动释放!

方法一:用raspi-config(最推荐)

sudo raspi-config

进入 →Interface OptionsSerial Port

然后选择:
- ❌ 是否启用串口登录 shell? →No
- ✅ 是否启用硬件串口? →Yes

保存退出,重启生效。

这个操作会自动完成两件事:
1. 禁用串口控制台(不再输出Linux启动信息)
2. 启用/dev/serial0设备节点供用户程序使用

方法二:手动修改配置文件

编辑/boot/config.txt
# 释放PL011 UART,禁用蓝牙占用(Raspberry Pi 3/4常见问题) dtoverlay=disable-bt # 强制启用UART enable_uart=1
(旧系统)编辑/boot/cmdline.txt

删除类似console=serial0,115200console=ttyS0,115200的参数。

保存后重启。


Python代码实战:轻松读取串口数据

一切就绪后,就可以用Python收发数据了。

安装依赖

pip install pyserial

示例代码:监听串口并打印消息

import serial import time # 打开串口 ser = serial.Serial( port='/dev/serial0', # 主UART设备(符号链接) baudrate=115200, # 波特率必须一致 parity=serial.PARITY_NONE, # 无校验位 stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 # 读取超时,避免阻塞 ) print("正在监听串口...") try: while True: if ser.in_waiting > 0: # 有数据到达 data = ser.readline().decode('utf-8').strip() print(f"收到: {data}") except KeyboardInterrupt: print("\n用户中断") finally: ser.close()

🔍 关键点解析:
-port='/dev/serial0':这是指向当前激活UART的通用路径,兼容性强;
-baudrate=115200:与对方设备严格一致,否则会出现乱码;
-timeout=1:防止readline()永久阻塞;
-.decode('utf-8'):将字节流转为可读字符串。

你可以用这块代码接收来自STM32的传感器数据、GPS坐标,甚至是自定义指令。


典型应用场景:树莓派 + STM32 构建边缘网关

来看一个真实项目案例:

[温湿度传感器] → [STM32] ←UART→ [树莓派] ←WiFi→ [云平台]

在这个架构中:
-STM32负责实时采集DHT11、MQ-2等模拟/数字传感器;
- 数据打包成JSON格式,通过UART以115200bps发送给树莓派;
-树莓派接收后解析数据,通过MQTT上传至阿里云IoT或Home Assistant;
- 用户可通过手机App远程查看环境状态。

整个系统分工明确:MCU处理实时任务,树莓派专注网络与存储。而连接它们的纽带,正是UART。


常见问题排查清单

问题现象可能原因解决方案
完全无输出串口被禁用或控制台占用运行sudo raspi-config启用硬件串口
收到乱码波特率不一致双方确认均为9600/115200等标准值
间歇性断连共地不良或电源噪声检查GND连接,增加去耦电容
接收正常但无法发送发送端未供电或线路断开用万用表测TX线是否有信号跳变
IO口发热甚至烧毁接入5V信号未做电平转换加电平转换模块,或改用3.3V MCU

💡 小技巧:
使用USB转TTL模块(CH340G/CP2102)连接PC,配合串口助手(如PuTTY、SSCOM)抓包分析,能快速定位通信问题。


提升稳定性:几个工程师才知道的最佳实践

  1. 加限流电阻:在TX/RX线上串联330Ω电阻,防短路更安心;
  2. 优先使用标准波特率:如9600、19200、115200,减少时钟误差累积;
  3. 设计通信协议:加入帧头(如0xAA)、长度字段、CRC校验,提升抗干扰能力;
  4. 远距离通信考虑隔离:超过1米建议使用光耦或磁耦隔离模块,防止地环路干扰;
  5. 调试阶段保留串口访问权限:未来升级无显示器设备时,串口将是唯一的调试入口。

写在最后

UART看似古老,却是嵌入式世界中最值得信赖的通信方式之一。

掌握树莓派上的UART连接方法,不只是学会接几根线那么简单。它意味着你能:
- 快速定位系统启动故障;
- 实现树莓派与各类MCU的无缝协作;
- 构建稳定可靠的边缘计算节点;
- 在无网络、无显示的环境下依然掌控全局。

下一次当你拿起杜邦线时,请默念三遍:

TX连RX,RX连TX,务必共地

愿每一次连接,都安全、稳定、成功。

如果你在实践中遇到了特殊问题,欢迎留言讨论,我们一起解决。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询