news 2026/3/20 17:42:39

树莓派5引脚定义通俗解释:什么是BCM与物理编号

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派5引脚定义通俗解释:什么是BCM与物理编号

树莓派5引脚定义通俗解释:BCM与物理编号到底怎么选?

你有没有过这样的经历?手握树莓派5,插好线、写完代码,按下运行——结果LED不亮、电机不动。检查千遍,最后发现:引脚接错了

更离谱的是,明明查了资料说“用18号引脚控制PWM”,可你接的是物理第18脚(Pin 18),程序却毫无反应。而旁边那个标着“12”的引脚,反而能正常输出PWM信号。

这背后的原因,正是树莓派最让新手头疼的问题之一:同一个引脚,为什么有两种编号?BCM和物理编号到底有什么区别?我又该用哪一个?

别急,今天我们不讲术语堆砌的官方文档,也不照搬数据手册。咱们就从一块板子、一根杜邦线开始,把这个问题彻底讲清楚。


一个引脚,两种名字:就像人有学名和小名

想象一下,你在学校里有两个名字:

  • 学名:张伟(对应芯片内部的正式编号)
  • 小名:老三(因为你在家里排行第三)

老师点名时喊“张伟”是对的,家人叫你“老三”也没错——但如果你听混了,别人喊“老三”你站起来答“到”,结果发现人家是在叫隔壁班李家的老三……那就尴尬了。

树莓派的GPIO引脚就是这样。
每个可用的信号引脚都有两个“名字”:

  • BCM编号:Broadcom SoC里的真实通道号,是它的“学名”
  • 物理编号(BOARD):在电路板上从1到40顺序排列的位置号,是它的“小名”

它们指向同一个硬件引脚,但命名逻辑完全不同。

✅ 比如你看到开发板上的第12个物理引脚(Pin 12),它的真实身份是 BCM18 —— 它既是“老十二”,也是“张十八”。

所以问题来了:编程的时候,你是按“学名”叫,还是按“小名”喊?

答案取决于你的习惯、项目需求,以及使用的库。


BCM编号:给“懂行的人”准备的专业语言

什么是BCM?

BCM 是Broadcom SOC Channel的缩写,意思是博通公司设计的片上系统(SoC)中 GPIO 通道的原始编号。

树莓派5用的是博通的 BCM2712 芯片,所有GPIO功能都由这个芯片原生支持。每个可以编程的IO口,在芯片内部都有一个唯一的数字代号,比如 GPIO18、GPIO21……这些就是所谓的“BCM编号”。

你可以把它理解为:这是硬件工程师写数据手册时用的名字

为什么专业开发者偏爱BCM?

因为 BCM 编号直接关联到芯片的功能特性。某些高级功能只能在特定的 BCM 引脚上启用:

功能只能在哪些 BCM 引脚使用
硬件 PWM 输出BCM12, BCM13, BCM18, BCM19
I²C 总线(SDA/SCL)BCM2/BCM3(默认I2C1)
SPI 主设备BCM9/10/11/8/7(MISO/MOSI/SCLK/CE)

比如你想用硬件级PWM来驱动伺服电机或调光LED,就必须选择支持硬件PWM的引脚(如 BCM18)。如果你只看物理位置乱接,很可能选到了不支持PWM的引脚,软件模拟虽然可行,但精度差、占CPU资源。

此外,现在很多现代Python库(如gpiozeropigpio)默认使用 BCM 模式,开源社区的示例代码也大多基于 BCM 编号编写。如果你想复用别人的项目,统一使用 BCM 会省去大量转换成本。

实战代码示例(RPi.GPIO + BCM)

import RPi.GPIO as GPIO # 设置使用 BCM 编号模式 ← 关键一步! GPIO.setmode(GPIO.BCM) # 配置 BCM18 为输出模式(支持硬件PWM) GPIO.setup(18, GPIO.OUT) # 输出高电平,点亮连接在此引脚的LED GPIO.output(18, GPIO.HIGH) # 清理释放资源 GPIO.cleanup()

📌 注意:只要写了GPIO.setmode(GPIO.BCM),后面所有的引脚操作都必须使用 BCM 数字,不能再用物理编号!


物理编号(BOARD):新手友好型“地图导航”

什么是物理编号?

物理编号就是按照你在树莓派主板上看得到的顺序,从左到右、从上到下,给每一个金属针脚依次编号,从 1 到 40。

这种编号方式完全不关心芯片内部结构,只关心“你在哪”。

就像你在电影院看电影,座位号是“第5排第8座”一样,不管这排椅子是谁生产的,只要按图索骥就能找到位置。

为什么适合初学者?

因为它直观、不怕忘

你不需要记住“BCM18 是哪个位置”,只需要低头看看开发板上的丝印文字:

  • 第一排左边第一个是 Pin 1
  • 右边那个是 Pin 2
  • 下一排左边是 Pin 3,右边是 Pin 4
  • ……一直到最底下是 Pin 39 和 Pin 40

很多树莓派主板还会用颜色或标记突出电源引脚(3.3V、5V、GND),配合面包板接线非常方便。

更重要的是,像 Pin 1(3.3V)、Pin 6(GND)、Pin 12(PWM输出)这样的关键引脚,在历代树莓派中基本保持一致。这意味着你一旦熟悉了某个布局,升级换代后也能快速上手。

实战代码示例(RPi.GPIO + BOARD)

import RPi.GPIO as GPIO # 改用物理编号模式 GPIO.setmode(GPIO.BOARD) # 配置物理第12号引脚为输出(其实就是 BCM18) GPIO.setup(12, GPIO.OUT) # 点亮LED GPIO.output(12, True) # 释放资源 GPIO.cleanup()

✅ 这段代码和前面的功能完全一样,只是换了个“叫法”。只要你记得“第12个孔”要接LED,就能顺利运行。


对比总结:一张表看懂该用谁

对比维度BCM 编号物理编号(BOARD)
命名依据芯片内部GPIO通道编号板子上的物理位置
是否跨代一致❌ 不同型号可能变化✅ 多数保持兼容
是否支持高级功能✅ 明确标注(如PWM、I2C)⚠️ 需查映射表才知道
学习难度中等,需查阅文档低,肉眼可见
社区通用性高,主流库默认使用较少用于开源项目
推荐人群进阶用户、产品开发初学者、教学演示

💡 小贴士:物理 Pin 12 = BCM18,而且它是少数几个支持硬件PWM的引脚之一。这也是为什么很多教程推荐用它来控制舵机或RGB LED。


常见踩坑现场 & 解决方案

❌ 错误1:混淆编号,接错线

现象:
代码里写的是GPIO.setup(17, ...),你以为接的是靠近电源的那个“17号孔”,结果发现物理 Pin 17 其实是3.3V电源输出脚

后果:轻则外设烧毁,重则树莓派罢工。

🔍 真相:
- 物理 Pin 17 → 3.3V 电源(固定功能,不可编程)
- BCM17 → 是一个普通GPIO,位于物理 Pin 11 上

👉 所以你写的setup(17)如果用了 BCM 模式,其实是操作 Pin 11;如果用了 BOARD 模式,则是操作 Pin 17(电源脚),根本不是同一个东西!

✅ 正确做法:
- 使用命令行工具查看当前引脚状态:
bash pinout
安装方法:
bash sudo apt install python3-rpi.gpio pip3 install gpiozero

运行后会输出彩色引脚图,清晰显示每个位置对应的 BCM 编号和功能。

或者用 Python 查看:

from gpiozero import Device from gpiozero.tools import pinout pinout()

❌ 错误2:忘记设置编号模式

现象:
程序报错RuntimeWarning: No channel has been set up yet或直接崩溃。

原因:
没有在开头调用GPIO.setmode(GPIO.BCM)GPIO.setmode(GPIO.BOARD)

✅ 正确姿势:
永远把设置模式放在程序第一句(除了导入库之外):

import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # 必须先设模式!

否则后续所有setup()操作都会失败。

❌ 错误3:在一个程序里混用两种编号

现象:
前半段用 BCM 控制灯,后半段用 BOARD 控制蜂鸣器,结果其中一个不工作。

原因:
一旦设置了setmode(),整个程序就必须统一使用该模式。不能一会儿叫“张伟”,一会儿又叫“老三”。

✅ 解决办法:
整个项目坚持一种风格。建议团队协作时在 README 中明确声明:

📝 本项目采用 BCM 编号,请所有贡献者遵循此规范。


最佳实践建议

🟢 给初学者的建议:先用物理编号练手

  • 搭建简单电路时(如点亮LED、读取按钮),用物理编号+面包板最不容易出错。
  • 结合开发板丝印和接线图,建立空间感知。
  • 推荐工具:打印一份 Pinout.xyz 的图表贴在桌上。

🔵 给进阶用户的建议:转向 BCM 编程

  • 当你需要使用 I2C、SPI、PWM、编码器输入等功能时,必须依赖 BCM 编号才能精准定位。
  • 更容易阅读和复用开源项目代码(90%以上基于 BCM)。
  • 便于自动化测试和部署。

🛠 提效工具推荐

  1. 命令行查看引脚信息
    bash raspi-gpio get
    显示所有40个引脚的当前配置、电压状态和功能模式。

  2. 图形化引脚查询工具
    - 访问 https://pinout.xyz (响应式网页,手机也能看)
    - 安装gpiozero后运行pinout命令,终端输出带颜色的表格

  3. 代码中加入安全检查
    python if GPIO.getmode() is None: GPIO.setmode(GPIO.BCM)


写在最后:理解本质,才能自由切换

BCM 和 物理编号 并非对立关系,而是不同视角下的同一套系统。

  • BCM 是底层视角:关注“我能做什么”——功能决定位置。
  • 物理是用户视角:关注“我在哪里”——位置决定操作。

真正厉害的开发者,不是死记硬背某种编号,而是知道:

“我现在要用PWM,得找支持ALT功能的BCM引脚;然后根据它的物理位置去接线。”

这才是嵌入式开发的核心能力——在抽象与实物之间自如穿梭

下次当你拿起杜邦线时,不妨先问自己一句:

我现在是要叫它的“真名”,还是认它的“门牌号”?

想清楚这一点,你就已经超越了80%的新手。

如果你正在做树莓派项目,欢迎在评论区分享你是用 BCM 还是 BOARD?有没有因为编号搞错过引脚?我们一起避坑成长 👇

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

3B参数也能强推理!Jamba小模型极速登场

3B参数也能强推理!Jamba小模型极速登场 【免费下载链接】AI21-Jamba-Reasoning-3B 项目地址: https://ai.gitcode.com/hf_mirrors/ai21labs/AI21-Jamba-Reasoning-3B 导语:AI21 Labs推出仅含30亿参数的Jamba Reasoning 3B模型,通过Tr…

作者头像 李华
网站建设 2026/3/16 22:40:35

Emu3.5:10万亿token!原生多模态AI创作新标杆

Emu3.5:10万亿token!原生多模态AI创作新标杆 【免费下载链接】Emu3.5 项目地址: https://ai.gitcode.com/BAAI/Emu3.5 导语:BAAI团队推出的Emu3.5多模态大模型,凭借10万亿token的海量训练数据和创新的原生多模态架构&…

作者头像 李华
网站建设 2026/3/9 16:53:05

腾讯混元4B-GPTQ:4bit轻量化AI推理新选择

腾讯混元4B-GPTQ:4bit轻量化AI推理新选择 【免费下载链接】Hunyuan-4B-Instruct-GPTQ-Int4 腾讯混元4B指令微调模型GPTQ量化版,专为高效推理而生。支持4bit量化压缩,大幅降低显存占用,适配消费级显卡与边缘设备。模型融合双思维推…

作者头像 李华
网站建设 2026/3/14 16:08:33

ResNet18物体识别详解:预处理与后处理技巧

ResNet18物体识别详解:预处理与后处理技巧 1. 引言:通用物体识别中的ResNet-18价值 在计算机视觉领域,通用物体识别是构建智能系统的基础能力之一。从智能家居到内容审核,再到增强现实应用,能够快速、准确地理解图像…

作者头像 李华
网站建设 2026/3/12 16:27:08

快手AutoThink大模型:智能调节推理深度的新突破

快手AutoThink大模型:智能调节推理深度的新突破 【免费下载链接】KwaiCoder-AutoThink-preview 项目地址: https://ai.gitcode.com/hf_mirrors/Kwaipilot/KwaiCoder-AutoThink-preview 导语:快手Kwaipilot团队推出KwaiCoder-AutoThink-preview模…

作者头像 李华
网站建设 2026/3/19 9:13:35

AHN-Mamba2:Qwen2.5超长文本处理效率倍增

AHN-Mamba2:Qwen2.5超长文本处理效率倍增 【免费下载链接】AHN-Mamba2-for-Qwen-2.5-Instruct-14B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/AHN-Mamba2-for-Qwen-2.5-Instruct-14B 字节跳动种子团队(ByteDance-Seed&#x…

作者头像 李华