新星市网站建设_网站建设公司_阿里云_seo优化
2026/1/16 12:03:11 网站建设 项目流程

树莓派4B引脚图全解析:别再搞混物理编号和BCM GPIO了!

你有没有过这样的经历?
接好一个LED,写完代码,一运行——灯不亮。
换了个引脚,还是不行。
最后发现,原来是把“物理引脚7”当成了“GPIO7”来编程……结果控制的根本不是你想的那个引脚。

这在树莓派初学者中太常见了。
而问题的根源,往往就藏在那张看似简单的40针引脚功能图里。

今天我们就来彻底讲清楚:树莓派4B的引脚到底该怎么看?三种编号系统(物理、BCM、WiringPi)究竟有什么区别?哪些引脚能做PWM?I²C又该接哪两个?

不绕弯子,不说术语堆砌,咱们从实战出发,一步一步拆解这张图背后的逻辑。


一、先看清这40个引脚长什么样

树莓派4B背面有两排共40个金属针脚,排列为2×20的结构。这是标准的GPIO扩展接口,几乎每一代树莓派都保持一致。

这些引脚不是随便安排的,它们分为三类:

  1. 电源类引脚:比如3.3V、5V、GND
  2. 固定功能专用引脚:如I²C、UART、SPI等通信接口
  3. 可编程GPIO引脚:可以由你自由配置成输入/输出,甚至启用高级功能

✅ 小贴士:整个40针中,只有约26个是真正的通用GPIO(其余是电源或特殊用途),所以别指望每个都能拿来点灯。

当你拿起树莓派主板时,通常会这样面对它:
- 网口朝下
- HDMI接口朝上
- 那么左上角第一个引脚就是物理引脚1

这个位置是固定的,不会变。


二、物理引脚 ≠ BCM GPIO!很多人在这里栽跟头

物理引脚编号:接线用的“地图坐标”

物理引脚编号很简单:从1到40,按顺序数就行。

  • 左边一列奇数:1, 3, 5, …, 39
  • 右边一列偶数:2, 4, 6, …, 40

这种编号方式就像地图上的格子,方便你在面包板上准确插线。比如别人说:“把传感器接到第11个引脚”,你就知道找左边第6个。

但它有个致命缺点:不能直接用于编程!

因为操作系统和库函数根本不认“物理第几个”,它们只认芯片内部的通道号——也就是BCM编号


BCM GPIO编号:程序里真正要用的“身份证号”

BCM 是 Broadcom(博通)SoC 芯片给每个GPIO分配的唯一标识符。你可以理解为:这是引脚在CPU里的“真实姓名”。

举个经典例子:

物理引脚功能名称BCM GPIO
7GPIO44
11GPIO1717
12GPIO1818
13GPIO2727

看到没?物理引脚7对应的是BCM GPIO4,而不是GPIO7!

如果你在Python代码里写:

GPIO.setup(7, GPIO.OUT)

但没有事先设置编号模式,那默认可能是使用BCM编号,这就意味着你操作的是BCM GPIO7—— 对应的是物理引脚26,完全不是你以为的那个!

这就是为什么很多人的LED死活不亮——接对了硬件,却控错了引脚。

✅ 正确做法永远是:

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # 明确声明使用BCM编号 GPIO.setup(18, GPIO.OUT) # 控制BCM GPIO18(即物理引脚12)

记住一句话:接线看物理编号,写代码看BCM编号。


WiringPi编号:一个已经过时的老古董

你还可能在一些老教程里看到一种叫wiringPi的编号方式,比如:

  • wiringPi 0 → BCM GPIO17(物理引脚11)
  • wiringPi 1 → BCM GPIO18(物理引脚12)

这套编号是从0开始连续排列的,初衷是为了让C语言开发者更容易记忆。

但它的问题也很明显:
- 它是非官方自定义的
- 和其他系统不兼容
- 项目早已停止维护(作者已归档GitHub仓库)

现在的新系统甚至默认不安装wiringPi工具包。所以建议大家不要再学也不要再用

如果看到旧代码中有wiringPiSetup(),最好迁移到现代替代方案,比如libgpiod或 Python 的gpiozero


三、关键外设都接在哪?一张表说清常用功能引脚

光分清编号还不够,你还得知道哪些引脚支持哪些高级功能。

下面是树莓派4B最常用的复用功能(ALT function)对照表,建议收藏:

功能BCM GPIO物理引脚备注
I²C SDAGPIO23常接OLED、RTC芯片
I²C SCLGPIO35必须配对使用
UART TXDGPIO148串口发送
UART RXDGPIO1510串口接收
SPI CE0GPIO824片选0
SPI MOSIGPIO1019主发从收
SPI MISOGPIO921主收从发
SPI SCLKGPIO1123时钟线
PWM0GPIO1812支持硬件PWM,常用于舵机
PWM1GPIO1935同样支持PWM

📌 特别注意:
- I²C 只能在 GPIO2/GPIO3 上使用(物理引脚3和5)
- 默认情况下这些接口是关闭的,需要手动开启

怎么开?很简单,在终端执行:

sudo raspi-config

进入 “Interface Options” → 开启 I2C、SPI、Serial Port 即可。

或者直接编辑/boot/config.txt文件,加上:

dtparam=i2c_arm=on dtparam=spi=on enable_uart=1

保存后重启生效。


四、复用功能是怎么工作的?底层原来是个多路开关

你可能会好奇:同一个引脚怎么能既当普通IO,又能当I²C用?

答案就在SoC内部的一个叫GPFSEL寄存器的地方。

每个GPIO引脚背后都有一个多路选择器(MUX),通过设置不同的寄存器值,决定这个引脚当前走哪条“通道”:

  • 000:输入模式
  • 001:输出模式
  • 100:ALT0 功能(如I²C、SPI)
  • 101:ALT1 功能
  • 111:ALT5 功能

例如,GPIO18 的 ALT0 是 PWM0 输出,所以当你想用它驱动舵机时,就得把它设为 ALT0 模式。

大多数开发库(如RPi.GPIO)会在调用GPIO.setup(pin, GPIO.ALT0)或使用PWM时自动处理这部分,无需手动操作寄存器。

不过如果你想查看当前所有引脚的状态,可以用这个命令:

gpio readall

输出类似这样:

+-----+-----+---------+------+---+-Model B--+---+------+---------+-----+-----+ | Pin | Mode| Name | Value| Physical|Value| Name | Mode| Pin | +-----+-----+---------+------+----+----+------+---------+-----+-----+ | | | 3.3V | | 1 || 2 | | 5V | | | | 2 | IN | SDA.1 | HIGH | 3 || 4 | | 5V | | | | 3 | IN | SCL.1 | HIGH | 5 || 6 | | 0V | | | | 4 | IN | GPIO.4 | HIGH | 7 || 8 | TXD | ALT0 | 14 | | | | 0V | | 9 || 10 | RXD | ALT0 | 15 | | 17 | IN | GPIO.17 | HIGH | 11 || 12 | PWM0 | ALT0 | 18 | ...

一眼就能看出哪个引脚在做什么,调试神器!


五、新手常踩的坑,我都替你踩过了

❌ 错误1:以为GPIO7就是物理引脚7

前面说过,物理引脚7其实是BCM GPIO4,而 BCM GPIO7 是物理引脚26。

混淆这两者,轻则设备不工作,重则烧毁外围电路。

✅ 解法:永远在代码开头明确设置编号模式:

GPIO.setmode(GPIO.BCM) # 或 GPIO.BOARD(物理编号)

注:GPIO.BOARD表示使用物理编号,此时setup(7, OUT)才是指物理引脚7。但强烈建议统一使用 BCM,避免混乱。


❌ 错误2:往保留引脚接设备

有些引脚看起来空着,其实有特殊用途:

  • 物理引脚27(ID_SC)、28(ID_SD):用于连接HAT(树莓派官方扩展板)的身份识别EEPROM
  • RUN 引脚(靠近3V3的一侧):用于软重启CPU

误接可能导致启动异常或通信失败。

✅ 解法:避开这些特殊引脚,除非你知道自己在干什么。


❌ 错误3:超载供电导致电压不稳

虽然有5V和3.3V输出引脚,但它们带载能力有限:

  • 3.3V 引脚最大输出约50mA(总电流限制)
  • 每个GPIO输出电流不超过16mA

直接驱动多个LED或继电器很容易拖垮电源。

✅ 解法:
- 使用外部电源供电
- 用晶体管或ULN2003等驱动芯片扩流
- 别把大功率设备直接挂在树莓派上


六、高效开发建议:让你少走三年弯路

1. 接线要有仪式感

  • 红色线接VCC(5V/3.3V)
  • 黑色线接地(GND)
  • 黄色/白色接信号线
  • 杜邦线尽量剪短,减少干扰

2. 代码要自带说明书

# LED connected to BCM GPIO18 (Physical Pin 12) LED_PIN = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT)

加一句注释,几个月后再看也秒懂。

3. 善用可视化工具

推荐两个神器:
- pinout.xyz :交互式引脚图,鼠标悬停显示功能
- Raspberry Pi Imager 自带的引脚查看器:刷系统前就能查


写在最后:掌握引脚,才算真正入门树莓派

很多人觉得树莓派就是装个系统跑个Python脚本,但真正的嵌入式开发,是从你第一次正确点亮一个LED开始的。

而这一切的前提,是你必须读懂那张40针引脚功能图

总结一下核心口诀:

物理编号看位置,BCM编号写代码;
I²C找GPIO2/3,PWM首选GPIO18;
复用功能靠配置,别碰保留引脚区;
查手册、用readall,开发路上少踩雷。

下次当你准备接线时,不妨停下来先问自己一句:

“我现在说的是‘物理第几个’,还是‘BCM第几个’?”

这个问题的答案,决定了你是顺利点亮LED,还是对着万用表发呆一整天。

如果你正在学习树莓派GPIO开发,欢迎把这篇文章分享给一起折腾的朋友。毕竟,我们一起点过的灯,才是最有温度的代码。💡

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

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

立即咨询