韦东山《ARM 架构与编程》3-1 硬件知识_LED 原理图 · 学习笔记所属课程ARM 架构与编程 · 基于 STM32F103前身《单片机核心 / RTOS 必备 · 硬件编程大全》所在章节第三章 第一个程序点亮 LED· 第 1 节原视频https://video.100ask.net/p/t_pc/course_pc_detail/video/v_5f858f8ee4b06aff1a03db26整理日期2026-09-28目录摘要一、本节在课程中的位置1.1 课程坐标系1.2 与相邻小节的关系二、核心命题点亮 LED 的三步法2.1 第一步看原理图确定控制 LED 的引脚2.2 第二步查主芯片手册确定引脚如何配置2.3 第三步写程序三、如何读一张 LED 原理图3.1 原理图上的三类符号3.2 关键判据LED 的正极接在哪一端3.3 网络标号与引脚命名四、LED 的四种驱动方式4.1 方式一高电平点亮拉电流4.2 方式二低电平点亮灌电流4.3 灌电流与拉电流的工程差异4.4 方式三与方式四三极管驱动五、为什么必须串限流电阻5.1 LED 是电流驱动器件5.2 限流电阻的估算5.3 电阻位置的等价性六、三极管驱动从驱动 LED到驱动开关6.1 NPN 低侧驱动6.2 为什么要用三极管6.3 两级驱动的反相逻辑七、从原理图推导程序逻辑7.1 电平与亮 / 灭的映射表7.2 常见误区八、本节结论与延伸附录 A术语速查附录 B读完本节后的自查清单摘要本节以点亮 LED 为切入点提出读原理图、查手册、写程序三步法辨析高低电平两种接法阐明限流电阻的分压作用比较灌电流与拉电流的能力差异并给出三极管扩展驱动电路。旨在建立先看硬件、再定电平、后写代码的工程思维为后续 GPIO 操作奠定基础。一、本节在课程中的位置1.1 课程坐标系《ARM 架构与编程》是一门寄存器版单片机裸机课程同一套知识点分别在 STM32F103Cortex-M3、I.MX6ULLCortex-A7、STM32MP157Cortex-A7 M4三款开发板上各录一遍因此本节的标题在三个版本中完全一致仅连接符写法略有差异硬件知识_LED原理图/硬件知识-LED 原理图。课程对使用者的定位很清楚维度说明面向人群已用 Keil HAL 库学过单片机但想理解内部机制的人准备学 U-Boot / RTOS / Linux 驱动却无从入手的人与 HAL 路线的关系HAL 封装了细节难以直接切入 RTOS 与 U-Boot本课程从第一条指令、第一个寄存器讲起承上启下上承嵌入式概念及硬件组成下启GPIO 操作方法概述 → 各芯片的 GPIO 操作 → LED 编程1.2 与相邻小节的关系第三章的四个I.MX6ULL / STM32MP157 版本为五个小节构成一条完整的让灯亮起来的链路3-1 硬件知识_LED 原理图 ← 本节硬件层回答引脚是哪根、什么电平点亮 ↓ 3-2 GPIO 引脚操作方法概述 ← 抽象层回答通用地看怎么让引脚输出高低电平 ↓ 3-3 具体芯片的 GPIO 操作方法 ← 芯片层回答STM32F103 上用什么寄存器、什么位域 ↓ 3-4 具体芯片的 LED 编程 ← 软件层回答如何写出第一个能烧进板子的程序本节是整条链路的前置条件如果不知道开发板上 LED 挂在哪个引脚、哪个电平才是亮后面三步写出来的代码只能是照抄无法自己判断对错。二、核心命题点亮 LED 的三步法课程把点亮一个 LED类比为 C 语言的Hello World并把它拆成三个可复用的固定步骤。这三步是跨芯片通用的方法论——换一块板子、换一款芯片流程不变变的只是中间步骤的具体答案。2.1 第一步看原理图确定控制 LED 的引脚从开发板提供的原理图Schematic中找到 LED 所在的那一小块电路读出两件事控制引脚是谁——通过网络标号Net Label追到主芯片的某个引脚例如PC13、GPIO5_3、PA1。什么电平点亮——顺着 LED 的极性判断见第三节。2.2 第二步查主芯片手册确定引脚如何配置拿到引脚编号后回到主芯片的数据手册 / 参考手册查清三件事该引脚属于哪个端口Port / Bank要让这个引脚能输出需要配置哪些寄存器、哪些位部分芯片还需要先使能该端口的时钟否则寄存器写下去没有任何反应。2.3 第三步写程序把上一步的寄存器操作翻译成代码编译、烧写、观察现象。这一步的输入完全依赖前两步的结论引脚错了灯不亮电平判断反了灯常亮或常灭。方法论的要点三步法把点亮 LED从一次性的技巧变成了一套可迁移的排查路径。后面点按键、点串口、点 LCD走的都是同一套流程。三、如何读一张 LED 原理图3.1 原理图上的三类符号读 LED 电路只需认识三类符号符号类型在图上的样子需要读到什么电源与地VCC/3V3/VDD以及接地符号GND电流回路的起点与终点无源器件电阻矩形或折线、LED三角形加一横、带两个箭头LED 的三角形指向即电流方向横线一端是阴极连接关系网络标号PC13、LED1、连线交点这块电路接到了哪个引脚、哪个网络3.2 关键判据LED 的正极接在哪一端这是本节最实用的一条结论可以概括成一句口诀LED 正极接引脚、负极接 GND → 引脚输出高电平点亮。LED 正极接 VCC、负极接引脚 → 引脚输出低电平熄灭、输出低电平点亮低电平有效。严格来说判据是看电流往哪流LED 是单向导通器件只有阳极电位高于阴极且压差达到正向压降时才有电流灯才亮。因此只要确定 LED 的阳极接在引脚上还是接在电源上就能反推出点亮值是 1 还是 0。3.3 网络标号与引脚命名原理图上不会画一整根线连到芯片而是用网络标号代替。见到PC13这样的标记要能拆解PPin / Port通用引脚C端口组编号A、B、C …13组内引脚序号。因此PC13表示端口 C 的第 13 号引脚。这一步的产出正是第二步去查手册的索引。四、LED 的四种驱动方式课程把常见的 LED 驱动电路归纳为四种方式。它们分成两组前两种是引脚直驱后两种是加三极管驱动。4.1 方式一高电平点亮拉电流引脚输出3.3V → 点亮输出0V → 熄灭。电路形态引脚 → 限流电阻 → LED 阳极 → LED 阴极 → GND。电流由芯片引脚提供称为拉电流Source Current也叫高电平有效。4.2 方式二低电平点亮灌电流引脚输出0V → 点亮输出3.3V → 熄灭。电路形态VCC → LED 阳极 → LED 阴极 → 限流电阻 → 引脚。电流由外部电源提供、经引脚流入芯片内部称为灌电流Sink Current也叫低电平有效。4.3 灌电流与拉电流的工程差异课程强调这两种方式并非等价选型时看的是芯片的驱动能力对比项灌电流低电平点亮拉电流高电平点亮电流来源外部电源经引脚灌入芯片芯片引脚自己输出常见能力较强单个 IO 常见十几至二十几 mA较弱许多经典 MCU 的 IO 高电平驱动能力明显不足代码心智逻辑反相写 0 才是亮逻辑直观写 1 就是亮实践倾向多数开发板采用这种接法用于小电流指示灯需要注意的工程约束即使灌电流能力较强芯片手册通常还会规定所有 IO 的合计电流上限。所以同时点亮很多个 LED未必可行必须回去查手册的绝对最大额定值。4.4 方式三与方式四三极管驱动当芯片引脚驱动能力不足例如某些低功耗芯片的 IO 输出电流很小或者 LED 需要由独立电源供电时就引入三极管方式三引脚输出1.2V → 点亮输出0V → 熄灭。方式四引脚输出0V → 点亮输出1.2V → 熄灭。这里的1.2V指的是 LED 支路的独立电源电压。这两条结论的价值不在于记住具体电压值而在于揭示一个事实一旦引入三极管引脚的角色就从提供点亮 LED 的电流变成控制一个开关的通断引脚只需给出高 / 低电平即可不再需要关心这个电平是 3.3V 还是 1.2V也不需要具备点亮 LED 的电流能力。五、为什么必须串限流电阻5.1 LED 是电流驱动器件LED 不是给足电压就亮的器件它的正向伏安特性十分陡峭正向压降一旦达到阈值红光典型约 2.0V蓝白光更高继续加压会让电流急剧上升。若把 LED 直接接在 3.3V 与 GND 之间LED 两端被强加 3.3V远超其正向压降回路电流将不受控地增大结果是 LED 迅速烧毁严重时还会连带损坏 IO 口。因此必须串联一个电阻来分压并限制电流——这就是限流电阻。5.2 限流电阻的估算工程上用一个近似式估算R ≈ (V_电源 − V_LED正向压降) / I_期望电流以 3.3V 系统、红色 LEDV_f ≈ 2.0V、期望 8 mA 为例R ≈ (3.3 − 2.0) / 0.008 ≈ 162 Ω → 取标称值 330 Ω更保守、更安全取值要点算出的是下限实际选型一般往上取电流略小亮度足够、更安全不同颜色 LED 的 V_f 差别很大蓝白光 LED 在 3.3V 系统下压差很小会显得偏暗若为灌电流接法引脚在低侧电阻串在 LED 与引脚之间。5.3 电阻位置的等价性从限流的物理本质看电阻串在 LED 的哪一侧并不改变回路电流回路串联、电流处处相等。原理图上它常被画在靠引脚的一侧主要出于布线与阅读习惯的考虑而不是电气上的必须。六、三极管驱动从驱动 LED到驱动开关6.1 NPN 低侧驱动最常见的形式是把 NPN 三极管当作低侧电子开关VCC ── 限流电阻 ── LED ── 三极管 C 极 ├─ E 极 ── GND 引脚 ── 基极电阻 R_B ── 三极管 B 极引脚输出高电平 → 三极管导通 → LED 回路接通 → 点亮引脚输出低电平 → 三极管截止 → 回路断开 → 熄灭。引脚此时只提供极小的基极电流典型设计取I_B ≈ I_C / 10保证三极管进入饱和区而不是停留在放大区。因为基极电流可以小到零点几毫安引脚驱动能力不足的问题就被彻底绕开了。6.2 为什么要用三极管归纳起来有三个动机补足驱动能力把 IO 从扛负载电流降级为送一个控制信号。隔离风险LED 短路等故障电流流经三极管而非直接灌入 IO降低主芯片损坏概率。电平解耦负载可以由独立电源5V / 12V / 1.2V供电引脚电平与负载电压互不绑定。6.3 两级驱动的反相逻辑如果连驱动一个 NPN 的基极电流都嫌大可以再串一级用小电流的 PNP 去控制 NPN形成两级放大。代价是逻辑发生反相——低电平导通第一级、进而点亮 LED代码里的电平映射需要相应取反。选型时应优先挑选饱和压降 V_CE(sat) 小的三极管以减少无谓的压降损失。七、从原理图推导程序逻辑7.1 电平与亮 / 灭的映射表做完前面几步最终要产出的其实是这样一张表——它才是写代码时的直接依据原理图形态引脚输出 0引脚输出 1代码中的点亮LED 阳极接引脚、阴极接 GND灭亮输出 1LED 阴极接引脚、阳极接 VCC亮灭输出 0NPN 低侧驱动阳极经电阻接 VCC灭亮输出 1两级驱动反相亮灭输出 07.2 常见误区误以为写 1 就是点亮。绝大多数教学板的 LED 是低电平有效写 1 反而熄灭。判断依据只能是原理图不能靠经验。忽略端口时钟。STM32 等芯片在配置 GPIO 之前必须先使能对应端口时钟否则寄存器写入无效——这一步由 3-3 展开但心智模型在本节就该建立。省掉限流电阻。任何情况下 LED 回路都必须有限流电阻无论直驱还是三极管驱动。把引脚驱动能力当成无限。要同时看单个 IO 电流与全芯片合计电流两个限制。八、本节结论与延伸本节的落点可以浓缩为一句话点亮 LED 的第一步不是写代码而是读原理图读原理图要回答的唯一问题是——我们想让灯亮时引脚该输出高电平还是低电平。由这一句往外延伸本节埋下了三颗后续会反复用到的种子**“三步法”**是嵌入式外设开发的通用范式原理图 → 手册 → 代码**“灌电流 / 拉电流”**的区分会出现在后面按键、UART、I²C 等所有涉及电平的外设中**“IO 只负责控制不负责出力”**的思路正是后面学 RTOS、U-Boot 时理解驱动分层的起点。下一节 3-2《GPIO 引脚操作方法概述》将把让引脚输出高低电平这件事从本节的具体电路抽象成通用的操作方法。附录 A术语速查术语含义网络标号Net Label原理图上代替连线的名字如PC13用于指认引脚灌电流 / Sink Current电流从外部经引脚流入芯片通常对应低电平有效拉电流 / Source Current电流由引脚输出到外部通常对应高电平有效限流电阻串在 LED 回路中分压限流的电阻不可省略饱和区三极管作为开关完全导通的工作区需保证足够的基极电流V_f正向压降LED 导通时的正向电压红光约 2.0V蓝白光更高V_CE(sat)饱和压降三极管饱和导通时 C-E 之间的残留压降越小越好附录 B读完本节后的自查清单能说出点亮 LED 的三个固定步骤并解释为什么顺序不能颠倒。拿到一张 LED 原理图能在 30 秒内说出控制引脚是谁和什么电平点亮。能解释限流电阻的作用并写出其估算公式。能说明灌电流与拉电流的区别以及为什么多数开发板选择低电平点亮。能画出一个 NPN 低侧驱动 LED 的电路并说明基极电阻的作用。能说明引入三极管之后引脚的作用发生了什么本质变化。本文档依据课程公开目录、原视频页信息及公开学习笔记整理配合原视频 3-1 使用。