news 2026/2/2 9:23:46

Pi 4B插针定义深度解读:UART串口引脚使用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pi 4B插针定义深度解读:UART串口引脚使用方法

树莓派4B的UART串口:从引脚定义到实战通信,一文讲透

你有没有遇到过这种情况——接好了线,写好了代码,树莓派就是收不到GPS模块的数据?或者用USB转TTL连上去,终端里只看到乱码甚至完全没反应?

别急,问题很可能出在UART串口配置上。而根源,往往是对“Pi 4B插针定义”理解不深,尤其是那两个关键引脚:GPIO14 和 GPIO15。

今天我们就来彻底拆解树莓派4B上的UART串口,从物理引脚、电平特性、系统配置到Python通信实战,一步步带你打通任督二脉。无论你是刚入门的新手,还是卡在某个环节的老手,这篇文章都能帮你把坑踩明白。


为什么是GPIO14和GPIO15?搞懂这俩引脚才算入门

树莓派4B背面那个40针的排母,看起来密密麻麻,其实它有一套非常清晰的设计逻辑。其中最常被用到的一组功能就是UART串口通信,对应的正是:

  • GPIO14(物理引脚8) → TXD(发送)
  • GPIO15(物理引脚10) → RXD(接收)

这两个引脚属于BCM编号体系下的通用IO,但在默认状态下已经被映射为硬件UART控制器(PL011 UART)的通信通道。它们工作在3.3V TTL电平下,意味着高电平代表“1”时电压约为3.3V,低电平为0V。

🔍 小贴士:千万不要直接接到5V设备!像Arduino Uno这类主控输出的是5V信号,如果直接连到GPIO15,轻则通信失败,重则烧毁树莓派GPIO!

更麻烦的是,默认情况下,树莓派操作系统会把这对引脚当作“串口控制台”使用——也就是说,开机过程中的内核日志、登录提示符都会通过这里输出。如果你想用自己的程序去读写数据,就得先把这个“默认权限”释放出来。

所以,真正要用好UART,光知道哪根线接哪根还不够,你还得动系统配置。


引脚编号别再傻傻分不清:Board、BCM、WiringPi到底怎么选?

新手最容易混淆的就是引脚编号方式。同一个物理位置,三种叫法,稍不留神就配错了GPIO。

类型特点推荐场景
物理引脚号(Board)按照从左到右、从上到下顺序编号1~40接线时方便对照板子
BCM编号芯片内部寄存器编号,如GPIO14、GPIO15编程控制首选
WiringPi编号第三方库自定义编号,现已弃用不推荐使用

举个例子:
- 物理引脚第8针 = BCM GPIO14 = 原来的WiringPi编号15(但现在没人用了)

结论很明确:写代码一律用BCM编号。因为所有现代库(比如RPi.GPIO、pyserial、gpiozero)都基于BCM,这样能确保你的脚本在不同版本的树莓派之间有更好的兼容性。


UART是怎么工作的?一句话说清本质

UART全称叫“通用异步收发器”,关键词是“异步”。这意味着它不需要一根专门的时钟线来同步双方节奏,而是靠事先约定好的波特率来协调数据传输速度。

比如你设成115200 bps,那发送方每秒发11万5千多个比特,接收方也按这个节奏一个一个采样。只要两边差得不太离谱,就能正确还原数据。

典型的数据帧结构如下(以最常见的8N1模式为例):

[起始位(0)] [D0][D1][D2][D3][D4][D5][D6][D7] [停止位(1)]

总共10位,传输一个字节。没有校验位,起止分明,简单高效。

常见的波特率有:9600、19200、38400、57600、115200。对于树莓派与传感器之间的通信,115200是最常用的选择,兼顾速度与稳定性。


硬件怎么接?三句话讲清楚正确连接方式

要实现树莓派与其他设备(比如USB-TTL模块、ESP32、STM32等)的串口通信,请牢记以下三条铁律:

  1. 交叉连接
    - Pi 的 TX(GPIO14) → 对方的 RX
    - Pi 的 RX(GPIO15) ← 对方的 TX

  2. 共地是必须的
    双方必须共用GND(物理引脚6),否则没有统一的参考电平,信号无法识别。

  3. 电平必须匹配
    如果对方是3.3V系统(如ESP8266、多数LoRa模块),可直连;如果是5V系统(如Arduino Uno),必须加电平转换电路或使用带电平匹配的模块。

⚠️ 再强调一遍:绝对不要让5V信号进入GPIO14/15!

典型的连接拓扑如下:

[树莓派4B] GPIO14 (TX) ──────→ [RX of USB-TTL] GPIO15 (RX) ←────── [TX of USB-TTL] GND ──→ GND │ [PC via USB]

这种结构非常适合你在PC端通过串口工具(如PuTTY、minicom、Screen)查看树莓派启动信息,或者调试嵌入式程序。


系统配置才是关键:为什么/dev/ttyS0总是打不开?

很多人明明接对了线,却始终无法打开/dev/ttyS0/dev/serial0,程序报错“No such device”或“Permission denied”。

原因只有一个:串口还被系统拿去当控制台用了

解决办法分两步走:

第一步:关闭串口登录 shell

运行:

sudo raspi-config

进入菜单:

Interfacing Options → Serial

然后回答两个问题:
- “Would you like a login shell to be accessible over serial?” →No
- “Would you like the serial port hardware to be enabled?” →Yes

这一步的作用是告诉系统:“我不需要通过串口登录了,请把硬件交给我自己用。”

第二步:确保UART永久启用

编辑配置文件:

sudo nano /boot/config.txt

确认里面包含这一行:

enable_uart=1

如果没有,加上它。这一行能防止系统因动态电源管理或其他覆盖设置而禁用UART。

同时检查是否误加了以下语句(旧版配置常见错误):

dtoverlay=pi3-disable-bt # 或 dtoverlay=disable-bt

这些会干扰UART资源分配,在Pi 4B上应注释掉或删除。

改完重启:

sudo reboot

验证是否成功

重启后执行:

ls /dev/ttyS*

正常应该看到:

/dev/ttyS0

还可以查看符号链接:

readlink /dev/serial0

通常指向/dev/ttyS0,这是推荐在代码中使用的路径,因为它具有更好的跨平台适应性。


Python实战:用pyserial轻松实现串口通信

一旦硬件和系统都准备就绪,剩下的就是写代码了。Python配合pyserial库,可以让串口编程变得异常简单。

安装依赖

pip install pyserial

示例代码:双向通信模板

import serial import time # 打开串口 ser = serial.Serial( port='/dev/serial0', # 推荐使用symbolic link 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', errors='ignore').strip() print(f"收到: {data}") # 主动发送心跳包(可选) ser.write(b'Hello from Raspberry Pi!\n') time.sleep(1) except KeyboardInterrupt: print("\n退出中...") finally: ser.close()

📌关键细节说明
- 使用/dev/serial0而不是/dev/ttyS0,避免未来更换型号时路径失效
-timeout=1是为了防止readline()永久阻塞
-in_waiting判断缓冲区是否有数据,提升响应效率
- 加errors='ignore'防止非法编码导致崩溃
- 记得将当前用户加入dialout组以获得访问权限:
bash sudo usermod -aG dialout $USER


实际应用场景:树莓派作为智能网关的核心桥梁

在真实的项目中,UART不只是用来“打印点东西”。它是树莓派连接外部世界的关键通道之一

场景1:接入GPS模块(如NEO-6M)

  • GPS模块持续广播NMEA语句(如$GPGGA)
  • 树莓派通过GPIO15接收,解析经纬度、时间、定位状态
  • 数据可用于轨迹记录、时间同步或上传至服务器

💡 提示:很多GPS模块默认波特率为9600,请在代码中对应调整。

场景2:驱动LoRa模组(如SX1278)

  • 使用AT指令通过UART配置LoRa参数(频率、扩频因子等)
  • 树莓派作为中心节点,收集远程传感器数据
  • 构建远距离、低功耗的无线传感网络

场景3:与STM32协同工作

  • STM32处理实时任务(电机控制、PID调节)
  • 树莓派负责高级运算(图像识别、网络通信)
  • 双方通过UART交换状态和命令,形成“主控+协处理器”架构

这些应用的背后,都是那一对小小的引脚在默默支撑。


常见问题与避坑指南

❌ 问题1:什么都收不到?

  • ✅ 检查是否已禁用串口控制台
  • ✅ 双方波特率是否一致
  • ✅ 接线是否交叉(TX→RX,RX←TX)
  • ✅ 是否共地
  • ✅ 用万用表测一下对方TX脚有没有电平跳动

❌ 问题2:/dev/ttyS0不存在?

  • ✅ 确保/boot/config.txt中有enable_uart=1
  • ✅ 查看启动日志:dmesg | grep uart,看是否有初始化信息
  • ✅ 是否启用了蓝牙相关覆盖层导致冲突?

❌ 问题3:通信不稳定、丢包严重?

  • ✅ 避免超过1米的长导线
  • ✅ 使用带屏蔽层的杜邦线
  • ✅ 加大电源滤波电容,减少噪声干扰
  • ✅ 高干扰环境下考虑升级为RS-485差分通信

工程级建议:让产品更可靠的设计实践

如果你是在做正式产品而非实验原型,以下几点值得参考:

  1. 保留调试接口
    即使最终产品封闭,也建议在PCB上预留UART排针或测试点,便于现场升级和故障排查。

  2. 命名清晰
    在电路板丝印上明确标注“UART_TX”、“UART_RX”、“GND”,避免装配出错。

  3. 增加防护
    在UART信号线上添加TVS二极管,防静电(ESD)击穿,提高工业环境下的可靠性。

  4. 注意蓝牙影响
    Pi 4B上蓝牙使用的是mini-UART(通常是ttyS0),而主UART用于GPIO14/15。若需高性能蓝牙通信,可通过锁定core_freq=250来稳定mini-UART时钟源。

  5. 权限管理自动化
    在部署脚本中自动添加用户到dialout组,避免每次手动操作。


结语:掌握UART,才真正打开了硬件交互的大门

回到最初的问题:为什么你的串口不通?

可能只是少勾了一个选项,或多接了一根5V线。

但背后反映的,是对树莓派插针定义和底层机制的理解深度。

GPIO14 和 GPIO15 看似普通,实则是连接数字世界与物理世界的桥梁。只有当你真正搞懂它们的功能、限制和配置方法,才能游刃有余地驾驭各种传感器、模组和微控制器。

下次当你拿起杜邦线准备连接UART时,不妨停下来想一想:
- 我的波特率设对了吗?
- 控制台关了吗?
- 电平安全吗?
- 共地了吗?

把这些细节都理顺了,你会发现,原来串口通信,也没那么难。

如果你在实际项目中遇到了其他UART难题,欢迎在评论区留言交流。我们一起把每一个坑,变成通往精通的台阶。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

轻松掌握B站视频下载,打造个人专属媒体库

轻松掌握B站视频下载,打造个人专属媒体库 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾经在B站上看到精彩的教学…

作者头像 李华
网站建设 2026/1/29 22:12:02

Windows 10系统优化终极解决方案:简单三步实现性能飞跃

如果你正在为Windows 10系统的卡顿、存储空间不足和隐私泄露问题而烦恼,那么这个完整的系统优化方案将为你提供简单有效的解决方案。通过专业工具的系统性清理和优化,让你的电脑重获新生。 【免费下载链接】Win10BloatRemover Configurable CLI tool to …

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

Res-Downloader完全手册:全网资源一键下载的终极方案

还在为不同平台的资源下载而烦恼吗?Res-Downloader作为一款专业的资源下载工具,能够完美解决微信视频号、抖音、快手、酷狗音乐等多平台的资源下载难题,让你轻松实现全网资源一键下载! 【免费下载链接】res-downloader 资源下载器…

作者头像 李华
网站建设 2026/1/30 2:35:06

5步解锁离线电路仿真:CircuitJS1桌面版的完整应用方案

5步解锁离线电路仿真:CircuitJS1桌面版的完整应用方案 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator based on NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circuitjs1 还在为网络波动中断电路实验而烦恼吗…

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

LangFlow长期记忆存储方案探讨

LangFlow长期记忆存储方案探讨 在构建智能对话系统时,一个反复出现的痛点是:AI总是“金鱼脑”。用户前一秒说“我喜欢科幻电影”,后一秒问“推荐一部好看的”,它却毫无反应——因为上下文丢了。这种体验断裂,本质上源于…

作者头像 李华
网站建设 2026/1/30 3:30:23

Windows 11 LTSC微软商店完整安装指南:3分钟极速部署方案

Windows 11 LTSC微软商店完整安装指南:3分钟极速部署方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 还在为Windows 11 LTSC系统缺少微…

作者头像 李华