树莓派GPIO引脚概述:40pin引脚定义、编号方式与UART映射
好,咱们正式开始动手之前,得先把树莓派这张“脸”认清楚。我说的就是那个40pin的GPIO排针。
很多新手拿到树莓派,第一反应是:“这密密麻麻的针脚,哪个是哪个?” 别急,我刚开始玩树莓派的时候,也对着这40个引脚发过呆。有一次还因为接错线,直接把一个传感器模块烧了。嗯,从那以后,我再也不敢小看引脚定义了。
树莓派40pin引脚物理布局
树莓派从早期的26pin,发展到现在的40pin标准。不管你是Zero、3B+还是4B,只要不是那种计算模块,排针的物理排列都是一样的。你想想看,这其实是个好事——学会了,所有板子通用。
引脚分两排,每排20个。靠近SD卡槽或者板子边缘的那一排是1号引脚。我个人习惯把板子竖着放,让USB口朝下,这样1号引脚就在左上角。
下面这张图,是我自己画的一个引脚布局示意,你对照着板子看,一目了然。
GPIO编号方式:BOARD vs BCM
树莓派的GPIO编号,有两种方式。这可以说是新手最容易搞混的地方。我见过不少人在论坛上问:“为什么我写的代码控制不了引脚?” 结果一看,编号方式搞反了。
说白了,就是两套“命名系统”:
- BOARD编号:就是物理引脚的位置编号。1到40,简单粗暴。你拿万用表量,拿杜邦线插,用的就是这套。
- BCM编号:是Broadcom芯片内部定义的GPIO编号。比如GPIO2、GPIO3。这个编号和物理位置没有直接关系。
我建议你刚开始学的时候,用BOARD模式。为什么?因为物理位置不会变,你对着板子数就行。等你熟悉了芯片内部结构,再用BCM模式会更灵活。
| 编号方式 | 命名规则 | 优点 | 缺点 |
|---|---|---|---|
| BOARD | 物理引脚位置 (1-40) | 直观,对板子接线方便 | 不同型号板子引脚功能可能不同 |
| BCM | 芯片内部GPIO编号 | 与芯片手册一致,跨板兼容性好 | 需要查映射表,不直观 |
LED_PIN_BOARD = 11 和 LED_PIN_BCM = 17。这样一看就知道用的是哪种编号。
UART引脚映射:TXD与RXD
好,重点来了。我们做串口通信,最关心的就是UART的收发引脚。
树莓派默认的UART(也就是ttyAMA0或者ttyS0),对应的引脚是:
- TXD(发送):物理引脚8,对应BCM编号GPIO14
- RXD(接收):物理引脚10,对应BCM编号GPIO15
这里有个坑,我必须要说。树莓派3B+和4B上,默认的UART是“迷你UART”(mini UART),它和蓝牙共用。如果你直接用它做串口通信,波特率会漂移。我曾经被这个问题折腾了一下午,数据总是乱码。
/boot/config.txt 中配置 dtoverlay=disable-bt,或者使用PL011 UART。
下面这个表格,把常用的UART引脚映射整理了一下,建议你收藏。
| 功能 | BOARD引脚 | BCM GPIO | 说明 |
|---|---|---|---|
| TXD | 8 | 14 | 数据发送 |
| RXD | 10 | 15 | 数据接收 |
| GND | 6, 9, 14, 20, 25, 30, 34, 39 | - | 共地必须接 |
| 3.3V | 1, 17 | - | UART电平标准 |
UART与GPIO的复用关系
你可能会问:“GPIO14和GPIO15,我能不能当普通IO用?” 答案是:可以,但默认情况下它们被配置为UART功能。
树莓派的引脚是“多功能复用”的。同一个物理引脚,可以当GPIO用,也可以当UART、I2C、SPI用。具体是什么功能,由引脚复用寄存器决定。
我个人习惯是:如果这个项目要用串口,我就把GPIO14/15专门留给UART,不去动它。省得后面调试的时候,搞不清到底是硬件问题还是配置问题。
/boot/config.txt 中,通过 dtoverlay 可以切换引脚功能。比如 dtoverlay=uart2 可以把GPIO0/1映射为UART。
如何快速验证UART引脚是否可用
理论说完了,咱们来点实际的。怎么确认你的TXD和RXD是好的?
一个最简单的办法:回环测试。把TXD和RXD用杜邦线短接,然后发数据。如果发出去的数据能原样收回来,说明引脚和UART硬件都没问题。
我曾经在一个项目里,怎么调都收不到数据。最后发现是杜邦线虚焊了。你想想看,排查了半天,结果是线的问题,多冤。
所以,我建议你每次接线后,都先做一次回环测试。花不了两分钟,但能省下大把的排查时间。
# 回环测试命令(在树莓派终端执行)
# 先安装工具
sudo apt-get install minicom
# 短接TXD和RXD后,运行
minicom -b 115200 -o -D /dev/ttyAMA0
# 在终端输入任意字符,如果能回显,说明UART通路正常
/dev/ttyS0。用 ls -l /dev/serial* 可以查看当前映射关系。
好了,这一章的内容就到这里。引脚编号和UART映射是后面所有实验的基础。你最好拿块板子,对照着上面的图,一个一个引脚认一遍。别偷懒,磨刀不误砍柴工。