第一部分 学习总览与方法
1.1 解决三个根本问题
学什么:以 STM32 为核心的嵌入式 MCU 开发。
用什么学:C 语言 + Keil MDK + VS Code + STM32CubeMX + HAL 库。
怎么学:工具使用 + 源码研读 + 官方文档查阅 + 工程实践。
1.2 核心学习路线
建立嵌入式行业认知与岗位图谱。
明确工具链选型,搭建开发环境。
认识 STM32F103ZET6 芯片本体。
学会查阅 DataSheet 与原理图。
理解裸机开发与 Flash 烧录。
掌握特殊功能引脚与普通 GPIO 引脚。
后续进入 GPIO、外设、中断、时钟、RTC 等实战。
既要懂原理,又要懂工具,还要懂源码。拒绝培养只会调 API 的“API 调用工程师”。
第二部分 嵌入式行业认知与岗位图谱
2.1 计算机平台与岗位对应关系
| 平台 | 典型岗位 |
|---|---|
| 个人电脑 | 客户端开发工程师 |
| 服务器 | 服务器开发工程师 |
| 智能手机/平板 | 移动开发工程师,如 Android/iOS |
| 单片机/MCU | 嵌入式开发工程师 |
2.2 嵌入式岗位细分
2.2.1 硬件工程师
负责电路原理图设计、PCB Layout、焊接调试。
核心技能:数电、模电、EDA 工具、硬件调试。
2.2.2 嵌入式系统架构师
负责技术方案选型、成本评估、软硬件团队协调。
要求:全栈视野、丰富项目经验、行业洞察力、带团队能力。
定位:进阶目标,不是入门起点。
2.2.3 嵌入式软件工程师
MCU 开发工程师:本课程核心方向,片上开发。
Linux 驱动开发工程师:基于 Linux 内核做驱动。
Linux 应用开发工程师:基于操作系统做应用开发。
其他细分:BSP、FPGA、DSP 等。
2.3 岗位分化本质
岗位分化是产业成熟度的体现。
初学者应聚焦MCU 软件开发这一基石。
架构师能力需多年实战沉淀,切勿好高骛远。
2.4 经典案例:智能家居冰箱
AI 负责决策:预测蔬菜消耗、自动下单。
嵌入式设备负责执行:数据采集、联网、控制。
体现“AI + 嵌入式”的产业落地逻辑。
2.5 坑
不要以为“嵌入式 = 纯硬件”。
不要以为“嵌入式 = Linux”。
MCU 开发是软硬结合的切入点,也是需求量最大的基础岗位。
第三部分 行业前景与技术生命周期
3.1 增长动力
AIoT:人工智能物联网。
新能源汽车、智能家居、边缘计算等设备量激增。
嵌入式设备是数据的“采集端”和指令的“执行端”。
AI 需要大量数据做决策,嵌入式负责采集、上报、控制。
3.2 抗周期性
纯软件框架迭代快,今天新框架,明天新 SDK。
嵌入式依赖硬件物理特性,底层协议如 USB、CAN、I2C 数十年稳定。
技术积累具有复利效应。
不易被 AI 自动生成代码完全替代。
护城河:对“物理世界约束”的理解。
3.3 数据支撑
国家统计局数据:嵌入式行业近五年增速约10%—20%。
同期 GDP 增速约5%。
嵌入式增速显著高于 GDP。
3.4 坑
前景光明,但入门门槛较高。
嵌入式的壁垒在于物理世界约束,纯代码生成工具难以跨越。
前期学习曲线陡峭,需做好心理建设。
第四部分 STM32 工具链选型深度解析
4.1 什么是工具链?
工具链是完成嵌入式开发所需的一系列软件组合。选对工具链是高效学习与工作的前提。
4.2 工具链方案对比
| 方案 | 组合 | 评价 | 结论 |
|---|---|---|---|
| 传统方案 | C + Keil + 标准外设库 | ST 官方 2017 年弃用,资料停更,AI 语料缺失 | 淘汰 |
| 商业方案 | C + IAR + ... | 授权昂贵,无社区版 | 不推荐 |
| 过渡方案 | C + Keil + CubeMX + HAL | 官方主流,但 Keil 编辑器体验差 | 可用但不优 |
| 推荐方案 | C + Keil MDK + VS Code + CubeMX + HAL | Keil 编译/调试,VS Code 编辑,CubeMX+HAL 配置 | 首选 |
| 一体化方案 | STM32CubeIDE | 封装度过高,隐藏底层细节,不利初学 | 后期可选 |
4.3 各工具定位
4.3.1 Keil MDK
ARM 公司提供。
负责编译、链接、烧录、调试。
ARM 收购 Keil 公司,成为 ARM 生态标配。
指令集适配最完美。
企业存量项目大量使用,兼容性好。
缺点:编辑器体验差。
4.3.2 VS Code
微软出品,现代编辑器。
插件丰富。
用于弥补 Keil 编辑体验短板。
前期仅作编辑器。
后期可通过插件实现编译、调试、烧录全流程。
4.3.3 STM32CubeMX
ST 官方图形化配置工具。
自动生成初始化代码。
将开发者从繁琐寄存器配置中解放。
核心作用:代码生成器。
配置引脚、外设、时钟、中断等。
4.3.4 HAL 库
ST 官方硬件抽象层库。
与 CubeMX 绑定。
提供标准化 API。
企业主流开发方式。
开源,可读源码。
4.4 开发流程对比
旧模式:手动查手册 → 手写寄存器配置代码 → 易错难调。
新模式:CubeMX 图形界面勾选引脚/外设 → 一键生成初始化代码 → 专注业务逻辑。
4.5 为什么推荐“Keil + VS Code”混合模式?
企业存量资产:很多公司仍用 Keil 工程。
现代开发体验:VS Code 编辑效率高。
进可攻:熟练后用 VS Code 提效。
退可守:回到 Keil 维护老项目。
本质是妥协的艺术,也是新人融入职场的安全垫。
4.6 坑
初学阶段切勿使用 STM32CubeIDE,过度封装会阻碍理解底层机制。
VS Code 前期仅作编辑器,待熟练后再接管编译调试。
标准外设库已淘汰,新项目严禁使用,仅维护旧项目时涉及。
IAR 授权昂贵,不推荐初学。
4.7 工具提供方与生态
| 工具 | 提供方 | 作用 |
|---|---|---|
| Keil MDK | ARM | 编译、链接、烧录、调试 |
| VS Code | 微软 | 代码编辑,插件扩展 |
| STM32CubeMX | ST | 图形配置、生成初始化代码 |
| HAL 库 | ST | 硬件抽象、标准 API |
第五部分 HAL 库正确学习路径
5.1 HAL 库定义
HAL:Hardware Abstraction Layer,硬件抽象层。ST 提供的开源硬件抽象库。
5.2 错误学法
把 HAL 当黑盒。
只会调 API。
不懂底层实现。
遇到 Bug 或特殊需求束手无策。
5.3 正解:HAL 库开发 + 源码研读
利用 HAL 开源特性。
对照 CubeMX 生成代码。
追踪函数内部如何操作寄存器。
理解配置代码与底层寄存器的映射关系。
5.4 HAL 源码价值
原厂工程师编写。
健壮性、规范性远超手写代码。
读懂 HAL 源码 = 学习工业级驱动写法。
未来反向理解标准库也很容易。
工具使用 + 源码研读。既要懂原理,又要懂工具,还要懂源码。
5.6 坑
不要因为 HAL 好用就放弃原理学习。
工具越先进,对使用者理解深度要求越高。
否则无法应对复杂工程问题。
第六部分 其他平台辨析
6.1 51 单片机
英特尔架构。
技术陈旧,逐渐淘汰。
建议直接 STM32 + HAL 入门,无需在 51 上浪费时间。
6.2 MSP430
主打低功耗。
与 51 基本同辈。
当前已退出舞台,不考虑。
6.3 GD32
国产,成本比 STM32 低。
与 STM32 高度兼容。
掌握 STM32 后自然迁移,无需单独开课。
6.4 ESP32
乐鑫公司推出。
主打 Wi-Fi / 蓝牙物联网场景。
开发模式比 STM32 简单。
后续课程会有专门板卡支持。
当前阶段先打好 STM32 基础。
6.5 树莓派 Raspberry Pi
卡片式计算机。
运行 Linux 操作系统。
可接显示器、键鼠、以太网。
属于应用层开发。
与 MCU 裸机/RTOS 开发完全不同。
6.6 平台选型结论
跳过 51 与 MSP430。
直接切入 ARM Cortex-M 架构,即 STM32。
了解 GD32 作为国产兼容补充。
了解 ESP32 作为物联网专用补充。
区分 MCU 开发与树莓派 Linux 应用开发。
第七部分 STM32F103ZET6 命名规则深度解析
7.1 命名总览
| 字段 | 含义 |
|---|---|
| STM32 | ST 公司 32 位微控制器产品系列 |
| F | 通用类型 |
| 103 | 增强型系列 |
| Z | 引脚数 144 Pin |
| E | 内部 Flash 容量 512KB,大容量产品 |
| T | 封装类型 LQFP,四边扁平封装 |
| 6 | 工业级温度范围 -40°C ~ +85°C |
7.2 各字段深度解释
7.2.1 STM32
ST:意法半导体。
M:Microcontroller,微控制器。
32:32 位。
合起来:ST 公司 32 位微控制器产品系列。
7.2.2 F103
F:通用类型。
103:增强型。
F103 是国民级标杆芯片,工程师入门和量产项目常用。
7.2.3 Z:144 引脚
Z = 144 Pin。
LQFP144 封装四边分布,每边 36 个,4 × 36 = 144。
选择 Z 系列原因:教学板需要足够多外设,方便入门覆盖 MCU 基本功能。
引脚数决定可连接外设数量。
量产产品若只需简单控制,可选 36 脚、48 脚等降低成本。
引脚越多,外设越多,成本越高。
技术服务于商业目标。
深度理解:
做玩具,36 脚足够;做汽车核心控制器,可能需要 144 脚。
选型时要考虑功耗、成本、终端售价、市场竞争力。
优秀的嵌入式工程师要有产品经济学视角,能说出“为什么不用更贵的型号”。
7.2.4 E:512KB Flash
E = 512KB Flash,大容量产品。
Flash 容量对应程序规模。
复杂算法需大容量,简单逻辑用小容量。
Flash 是程序体积的物理天花板。
若代码 + 常量超过容量,必须优化代码或换更大容量型号。
选型本质:功能需求与物料成本之间找最优解。
深度理解:
Flash 大小决定能烧写多大的程序。
程序复杂 → 选大 Flash;程序简单 → 选小 Flash 降成本。
不同 Flash 容量的 MCU 本质是对应不同规模的产品。
7.2.5 T:LQFP 封装
T = LQFP,Low-profile Quad Flat Package,四边扁平封装。
引脚从四周伸出,焊到 PCB 焊盘。
其他封装:
H = BGA,球栅阵列封装。
U = VFQFPN,超薄细间距四边扁平无引脚封装。
封装类型描述焊盘形状,由芯片工程师决定。
LQFP 适合手工焊接与教学。
BGA 引脚在底部,半球形,走线短,功耗效率可能更高,但难焊接。
7.2.6 6:工业级温度范围
6 = -40°C ~ +85°C。
7 = -40°C ~ +105°C。
温度影响可靠性、性能、晶振频偏、逻辑错误。
特殊场景:石油钻头、室外摄像头、汽车记录仪等。
高温可能导致晶振频率偏移,影响功能。
一般应用 6 已满足正常工况。
7.3 对比案例:STM32F103C8T6 vs STM32F103ZET6
| 型号 | 引脚 | Flash | 适用场景 |
|---|---|---|---|
| C8T6 | 48 Pins | 64KB | 简易遥控器、小传感器节点 |
| ZET6 | 144 Pins | 512KB | 带屏显、多电机控制、复杂网关 |
7.4 文档查阅
打开 DataSheet。
找到Ordering Information章节。
找到 Part Number 解码表。
逐一验证 Z/E/T/6 含义。
也可查 Reference Manual 了解外设寄存器与软件编程。
7.5 避坑指南
勿混淆手册:
命名规则、电气特性、封装、引脚 → DataSheet。
外设功能、寄存器、软件编程 → Reference Manual。
勿死记硬背:理解编码逻辑,遇到陌生型号即时查表。
注意版本:优先英文版 DataSheet。
中文手册可能翻译缺失、滞后、错误。
7.6 Q&A
Q1:型号太多记不住怎么办?
不需要死记。建立“索引能力”:看到型号不害怕,知道去哪查、怎么查。高频型号自然记住,不常用忘了就查。工程师核心能力是解决问题,不是当数据库。
Q2:硬件参数信源来自哪里?
硬件规格查 DataSheet;外设寄存器与软件编程查 Reference Manual。知识建立在确定性信源上。
Q3:中文手册找不到引脚定义或封装图?
英文原版通常最新最全。中文手册可能翻译不全、更新滞后或错误。缺图时切英文 DataSheet,如 Chapter 6 Package characteristics。
第八部分 裸机开发与 Flash 存储机制
8.1 裸机开发定义
Bare-metal Development:无操作系统环境下,应用程序直接在 MCU 硬件上运行,由 CPU 从 Flash 中逐条取指执行。
8.2 与操作系统开发对比
| 类型 | 代码规模 | 运行方式 |
|---|---|---|
| Windows/Linux/Android/macOS | 千万行级 | 应用跑在 OS 之上 |
| RTOS,如 FreeRTOS/RT-Thread | 万行级 | 轻量级调度 |
| 裸机开发 | 程序直接跑在 MCU 上 | CPU 逐行执行 |
8.3 裸机开发流程
PC 端编写 C/C++ 代码。
编译链接生成二进制文件
.bin/.hex。通过仿真器/下载器烧录至 MCU 内部 Flash。
MCU 上电/复位后,ARM Cortex-M3 内核从 Flash 起始地址读取指令,顺序执行。
控制外设完成任务。
8.4 Flash 容量意义
命名中的 E = 512KB。
是程序体积的物理上限。
代码 + 常量超过此限,必须优化或换型号。
Flash 越大,可拷贝程序体积越大。
8.5 避坑指南
区分宿主机与目标机:
VS Code、Keil 运行在 Windows/Linux。
生成的目标代码跑在 MCU 裸机上。
RTOS 认知:
F103 也可跑 FreeRTOS/RT-Thread。
初期学习应从裸机入手,理解底层硬件交互后再引入 OS 抽象层。
第九部分 DataSheet 与 Reference Manual 查阅方法
9.1 两类文档分工
| 文档 | 内容 |
|---|---|
| DataSheet 数据手册 | 硬件规格:命名、引脚、电气特性、封装、订货信息 |
| Reference Manual 参考手册 | 外设寄存器、软件编程、功能描述 |
9.2 查阅原则
硬件规格参数以英文版 DataSheet 为准。
中文手册可能存在翻译缺失或滞后。
引脚定义需结合封装类型与俯视图标识点确认。
对知识点存疑时,第一时间在手册中找到对应章节作为确证。
9.3 ST 官网下载路径示例
进入 st.com。
选择产品 STM32。
选择 F1。
选择 F103 系列。
选择设计文件。
下载对应型号 DataSheet,如 ZE 系列。
英文版通常更全,中文版为译文。
9.4 命名规则查哪里?
DataSheet 的Ordering Information章节。
找到 Part Number 解码表。
例如 STM32F103RC 示例图,可查:
STM32:产品型号。
F:通用类型。
103:增强型。
R:64 引脚。
C:256KB Flash。
T:LQFP。
6:工业温度范围。
9.5 深度理解:新班级同学类比
数据手册就好像你刚进入一个新的班级,刚开始你跟所有人都是陌生的。
但是当你天天跟班级同学打交道,时间久了,每一个人你都能认识,你还会给他起外号。
同样,参考手册或数据手册,我们对它的态度就是:它像一个陌生人,当我们需要的时候我们就去查它。
对应:
不要试图一次记住整本 DataSheet。
用到哪查到哪。
查多了自然熟悉。
工程师核心能力是“索引能力”,不是“背诵能力”。
第十部分 LQFP144 引脚布局与编号规则
10.1 LQFP144 基本结构
STM32F103ZET6 采用 LQFP144。
共 144 个引脚,四边分布。
每边 36 个,4 × 36 = 144。
引脚编号遵循 JEDEC 标准。
以芯片表面标记点 Dot 为基准。
逆时针方向依次为 Pin 1 至 Pin 144。
10.2 引脚编号分布
Pin 1—36:一边。
Pin 37—72:第二边。
Pin 73—108:第三边。
Pin 109—144:第四边。
10.3 图纸方向校正
10.3.1 实物俯视图规则
芯片正面朝上。
找到芯片表面的小黑点。
小黑点位于左下角。
从小黑点开始,逆时针编号:
Pin 1—36:下边。
Pin 37—72:右边。
Pin 73—108:上边。
Pin 109—144:左边。
10.3.2 DataSheet 图纸问题
DataSheet 中的 LQFP144 图,Pin 1 可能不在左下角。
有时 Pin 1 在左上角,或方向旋转了 90°。
如果不旋转,直接数:
会把 Pin 1 数成 Pin 36。
会把 Pin 37 数成 Pin 72。
引脚功能完全错位。
10.3.3 旋转方法
打开 DataSheet 的 LQFP144 引脚图。
将图纸逆时针旋转 90°。
使 Pin 1 标识点位于左下角。
此时与实物俯视图一致。
按逆时针方向数:
左下角为 Pin 1。
下边到右下角为 Pin 36。
右边到右上角为 Pin 72。
上边到左上角为 Pin 108。
左边回到左下角为 Pin 144。
10.3.4 旋转前后对比
| 方向 | Pin 1 位置 | 是否与实物一致 |
|---|---|---|
| DataSheet 原图 | 可能在左上角或其他位置 | ❌ 不一致 |
| 逆时针旋转 90° 后 | 左下角 | ✅ 一致 |
10.3.5 为什么 DataSheet 要这样画?
DataSheet 是给工程师看的,不是给初学者看的。
厂商默认读者有经验,不会特意调整方向。
不同封装图混在一起,排版紧凑。
所以需要读者自己校正方向。
10.3.6 验证方法
打开英文版 DataSheet。
找到 Chapter 6 “Package characteristics”。
找到 LQFP144 机械尺寸图。
对比中文版,中文版可能缺失此图。
以 Pin 1 物理标记为唯一基准。
不要依赖图纸印刷方向。
10.4 为什么有多种引脚图?
DataSheet 通常覆盖同一系列多个型号。
如 Z/V/R/C 多种封装。
必须精准定位到LQFP144章节。
忽略其他封装,如 BGA、LQFP100、LQFP64。
10.5 引脚分类
| 类型 | 数量 | 特点 |
|---|---|---|
| 特殊功能引脚 | 约 32 个 | 硬件功能固定,不可重映射 |
| 普通 GPIO 引脚 | 约 112 个 | 可软件配置为输入/输出/复用功能 |
10.6 内部编号与外部功能名:教室座位号类比
教室里一共有 50 个座位,我们给这 50 个座位编号分别是 1 到 50。
1 号座位坐的是班长,2 号座位坐的是学习委员,3 号座位坐的是卫生委员,6 号座位坐的是体育委员。
剩下的座位坐的都是普通学生。
老师来班里管理学生时,通常不会喊“1 号座位的人维持一下纪律”,而是喊“班长,维持一下纪律”“学习委员,把作业收一下”。
也就是说,日常管理时,我们用的是外部功能名称,而不是内部编号名称。
对应到 MCU:
| 教室 | MCU |
|---|---|
| 座位编号 1—50 | 引脚内部编号 1—144 |
| 班长、学习委员、体育委员 | 特殊功能引脚:VDD、VSS、NRST、BOOT0、VBAT |
| 普通学生 | 普通引脚:PA0—PG15 |
| 老师喊“班长” | 工程师用“NRST”“BOOT0”“PA0” |
| 老师喊“1 号座位” | 硬件工程师可能用“Pin 25”“Pin 143” |
结论:
内部编号:物理位置标识,硬件设计、PCB Layout 时用。
外部功能名:逻辑功能标识,写代码、看原理图时用。
两者一一对应,但使用场景不同。
10.7 避坑指南
认准封装:查图前确认芯片封装后缀,T = LQFP。
方向校验:始终以 Pin 1 物理标记为唯一基准。
中英文对照:中文手册缺图,立即切英文手册 Chapter 6。
BGA 引脚在底部,LQFP 引脚在四周。
第十一部分 特殊功能引脚详解
11.1 VDD / VSS:电源供电网络
定义
VDD = 正电源,3.3V。
VSS = 地,GND。
多对设计原理:家里排插类比
你家里供电的时候,家里的排插有多少?
你房间有,你爷爷家有,你奶奶家有,你爸爸妈妈房间有,客厅也有。
这么多排插,为什么不用一个总出口就完了?
不就是哪方便怎么来嘛。
对应到 MCU:
STM32F103ZET6 有约11 对 VDD/VSS,共 22 个电源引脚。
它们用的都是同一个 3.3V 和同一个 GND。
但 MCU 内部模块分布在不同位置:
有的 UART 在芯片右下角。
有的 SPI 在芯片左上角。
有的 ADC 在芯片底部。
如果只有一个电源引脚,内部走线会很长:
走线长 → 阻抗大 → IR 压降大。
走线长 → 容易引入 EMI。
走线长 → 瞬态电流响应慢。
多对 VDD/VSS 的三大作用:
| 作用 | 解释 |
|---|---|
| 缩短内部供电路径 | 每个模块就近取电 |
| 降低 IR 压降 | 走线短,电阻小,压损小 |
| 减少 EMI | 供电路径短,环路面积小,电磁干扰低 |
3.3V 标准来源
半导体工艺演进。
低功耗需求。
历史发展形成的行业标准。
原理图验证
比特灵犀板原理图中,所有 VDD 汇聚至 3.3V 网络标号。
所有 VSS 汇聚至 GND。
就近放置去耦电容,滤除高频噪声。
电流方向
电压形成电流,从高电压流向低电压。
电流方向与电子流动方向相反。
现阶段只需知道 VDD 接 3.3V,VSS 接地。
11.2 NRST:复位引脚
定义
Negative Reset,低电平有效复位输入引脚。
Pin 25。
N = Negative / Not,强调低电平有效。
若无 N 前缀,通常为高电平有效。
工作逻辑
| NRST 电平 | MCU 状态 |
|---|---|
| 高电平 3.3V | 正常运行 |
| 低电平 GND | 复位,CPU 停止当前操作,寄存器/外设恢复初始状态,程序计数器归零 |
硬件实现
开发板上通过轻触开关连接 NRST 与 GND。
默认上拉电阻保持高电平。
按下开关则短路至地,触发复位。
复位按键在板子左下角。
深度理解:Windows 重启类比
NRST 就像 Windows 电脑卡死了,你按重启键,让它重新以全新的工作方式运行。
所有内部数据、寄存器、硬件配置全部初始化,从最开始运行。
对应:
NRST 低电平有效。
触发 MCU 硬件复位。
寄存器/外设恢复初始状态。
程序计数器归零。
11.3 VBAT:备用电源与掉电保护
定义
Battery Backup Input。
主电源掉电时,为 RTC、后备寄存器等关键模块供电。
防止时间与数据丢失。
保持低功耗运行。
深度理解:水管单向阀类比
我们人类花了几千年,能够把水控制起来,让水能够实现单向流动。
比如有一种东西叫指挥阀,水从左向右流动时,冲开开关,它就流出来了。
但如果从右向左流动,这个开关在水压作用下就自动闭合了。水流越大,它闭得越紧。
到了近代,我们人类控制电的时候,也设计出来一种类似于指挥阀的东西,它就是二极管。
二极管基本符号与特性:
符号:三角形 + 竖线。
三角形一侧:阳极,正极。
竖线一侧:阴极,负极。
电流方向:阳极 → 阴极。
反向:阴极 → 阳极,截止,不导通。
核心特性:单向导电性。
导通条件:
普通硅二极管:导通压降约0.6—0.7V。
肖特基二极管:导通压降约0.3—0.4V。
导通条件:V阳极−V阴极≥VfV阳极−V阴极≥Vf。
硬件原理:肖特基二极管 OR-ing 电路
使用 BAT54C 双肖特基二极管。
电池:CR1220 纽扣电池,3V。
电池座:BS-12-B3AA003。
完整压降计算
正常工况:VDD = 3.3V,电池 = 3.0V
上方二极管:阳极 3.3V,阴极初始 0V,压差 3.3V > 0.4V,导通。
导通后阴极电压:3.3V−0.4V=2.9V3.3V−0.4V=2.9V。
下方二极管:阳极 3.0V,阴极 2.9V,压差 3.0V−2.9V=0.1V3.0V−2.9V=0.1V。
0.1V<0.4V0.1V<0.4V,下方二极管反向截止。
结论:由VDD 3.3V供电,VBAT 节点约 2.9V。
掉电工况:VDD 跌落至 0V
上方二极管:阳极 0V,阴极 2.9V,反向偏置,截止。
下方二极管:阳极 3.0V,阴极因负载下拉瞬间低于 2.6V,压差 3.0V−2.6V=0.4V3.0V−2.6V=0.4V,满足导通条件。
导通后阴极电压:3.0V−0.4V=2.6V3.0V−0.4V=2.6V。
结论:毫秒级内自动切换至电池供电,VBAT 节点约 2.6V。
完整对比表:
| 工况 | 上方二极管 | 下方二极管 | 供电源 | VBAT 节点 |
|---|---|---|---|---|
| 正常 | 导通 | 截止 | VDD 3.3V | 2.9V |
| 掉电 | 截止 | 导通 | 电池 3.0V | 2.6V |
为什么用肖特基?
普通硅管 Vf≈0.7VVf≈0.7V。
电池电压 3.0V。
若用普通硅管:3.0V−0.7V=2.3V3.0V−0.7V=2.3V。
2.3V 可能低于 RTC 工作阈值,导致 RTC 停摆。
肖特基 Vf≈0.3—0.4VVf≈0.3—0.4V,电池端可用电压 3.0V−0.4V=2.6V3.0V−0.4V=2.6V,满足 RTC 工作需求。
电脑纽扣电池类比
你的台式机,关机了,甚至电源线都拔了。过两三天再启动,时间还是对的。
为什么?因为电脑内部有纽扣电池,为时钟和基本配置供电。
VBAT 就是 MCU 的纽扣电池供电域。
实际产品还需考虑
电池反接保护。
漏电流。
电池寿命。
二极管反向恢复时间。
温度对压降的影响。
11.4 BOOT0:启动模式选择
定义
Boot Mode Selection Pin。
决定 MCU 复位后的程序入口地址。
模式对照
| BOOT0 电平 | 启动区域 | 用途 | 类比 |
|---|---|---|---|
| GND (0) | Main Flash,0x08000000 | 正常运行用户程序 | 从硬盘启动 Windows |
| VDD (1) | System Memory,Bootloader | ISP 串口/USB 烧录、修复 | 从 U 盘 PE 系统启动 |
硬件实现
通过滑动开关 SS12D07 选择接地或接 3.3V。
默认应置于 GND 侧。
BOOT1 在 LQFP144 中一般直接接地,不讨论。
开关往上掰接地,往下掰接 3.3V。
与 NRST 区别
NRST:重启动作,决定“何时开始”。
BOOT0:启动模式选择,决定复位后“从哪里开始执行代码”。
操作顺序完整推导:为什么先设 BOOT0,再按 NRST?
BOOT0 是电平敏感引脚。
MCU 只在复位释放瞬间采样 BOOT0 电平。
复位结束后,BOOT0 电平被锁存,决定启动区域。
如果先按 NRST,再改 BOOT0:
MCU 已经根据旧 BOOT0 电平启动。
再改 BOOT0 不会重新采样。
必须再次复位才能生效。
正确操作顺序:
设置 BOOT0 为所需电平。
按 NRST 复位。
MCU 复位释放时采样 BOOT0。
根据 BOOT0 电平跳转到对应启动区域。
错误操作顺序:
先按 NRST。
MCU 已按旧 BOOT0 启动。
再改 BOOT0。
无效,必须再按一次 NRST。
应用场景
Flash 程序损坏导致 SWD/JTAG 无法连接时。
拨动 BOOT0 至高电平并复位。
强制进入 Bootloader 模式进行救砖式烧录。
99.99% 情况 BOOT0 默认接地,正常运行用户程序。
BIOS 启动项类比
你想重装系统,从 U 盘启动,就开机狂按 F2/F12,进入 BIOS,设置启动设备为 U 盘。
下次电脑重启,就不再读取磁盘上的操作系统,转而读取 U 盘上的系统。
BOOT0 就是 MCU 的“启动项选择”。
11.5 其他特殊引脚简述
| 引脚 | 功能 |
|---|---|
| OSC_IN / OSC_OUT | 外部高速晶振输入/输出,为系统提供精准时钟源 |
| VREF+ | ADC/DAC 外部参考电压输入,提高模拟采样精度 |
| NC | No Connect,内部未连接,PCB 设计可悬空或接地,依手册建议 |
| BOOT1 | 启动模式相关,LQFP144 中默认接地,暂不讨论 |
11.6 特殊功能引脚总结
LQFP144 下特殊功能引脚约 32 个。
VDD/VSS 约 22 个。
NRST、VBAT、BOOT0、OSC、VREF+、NC 等。
硬件功能固定,软件不可改。
做板子的人通过原理图完成特定控制。
第十二部分 普通引脚结构与验证
12.1 普通引脚定义
普通引脚又称可编程引脚。
通过代码控制高低电平输出。
实现对外设的协议级别控制。
后续编写代码时主要使用这批引脚。
具体 GPIO 控制方法在后续课程讲解。
八爪鱼类比:
普通引脚就像八爪鱼一样,八爪鱼有各种触角,每一个触角将来就可以完成对某种外设的控制。
对应:
普通引脚 = 可编程引脚。
每个引脚可配置为输入/输出/复用功能。
分别控制不同外设:LED、按键、UART、SPI、I2C 等。
12.2 特殊功能引脚 vs 普通引脚
| 类型 | 功能 | 是否可编程 |
|---|---|---|
| 特殊功能引脚 | 供电、RESET、启动模式、电源切换等 MCU 自身基础功能 | 硬件固定,不可重映射 |
| 普通引脚 | 控制外设,协议级控制 | 可编程,可配置输入/输出/复用 |
12.3 引脚命名与数量统计
命名规则
格式:组别字母 + 编号。
如 PA0、PA15、PB0、PB15、PG0、PG15。
字母表示分组类别。
数字表示组内序号。
总量构成
STM32F103ZET6 共 144 个引脚。
普通引脚 112 个。
特殊功能引脚 32 个。
144 - 112 = 32。
分组详情
| 分组 | 引脚范围 | 数量 |
|---|---|---|
| PA | PA0—PA15 | 16 |
| PB | PB0—PB15 | 16 |
| PC | PC0—PC15 | 16 |
| PD | PD0—PD15 | 16 |
| PE | PE0—PE15 | 16 |
| PF | PF0—PF15 | 16 |
| PG | PG0—PG15 | 16 |
12.4 完整引脚组概念
ZET6 的 LQFP144 封装下,PA 至 PG 各组均为 0—15 完整配置。
称为完整引脚组。
其他封装或引脚数较少的 MCU 可能存在不完整组:
PF 组仅 6—8 个。
或缺少 PF、PG 组。
同系列不同封装,引脚个数不同。
12.5 物理排布特征:印度电线类比
正常情况下,我们走线应该规规矩矩,看起来舒服。
但你看印度人走线,那些电线完全很凌乱。
为什么?因为他们实用优先。
几十年前中国也一样,家里那些线也是随便弄的,怎么进怎么来。
对应:
普通引脚在 MCU 四周并非按 PA0—PA15 顺序连续排列。
而是完全打散分布。
设计原因:取决于 MCU 内部设备走线,实用优先,而非视觉规整。
查找建议:用 CubeMX 搜索验证,不要手动数。
12.6 STM32CubeMX 验证操作
工具定位
STM32CubeMX 为通用开发工具。
支持多型号 MCU。
当前阶段仅用于引脚可视化查看。
操作流程
打开 STM32CubeMX。
新建项目。
输入完整型号:STM32F103ZET6。
软件自动加载配套固件。
呈现芯片引脚图。
在搜索框输入组别关键字,如 PA、PB。
对应引脚自动高亮。
逐一核对 0—15 编号完整性。
搜索匹配注意事项
误匹配案例:
搜索 PE 时,PC13 引脚因名称包含
TEMPERATURE RTC字符串而被同时高亮选中。
识别方法:
人工核对高亮引脚的实际标签。
排除因字符子串匹配导致的非目标引脚干扰。
验证结论:
经逐组搜索确认,STM32F103ZET6 的 PA 至 PG 七组普通引脚均为完整的 0—15 配置。
12.7 普通引脚总结
普通引脚 = 可编程引脚。
ZET6 共 112 个普通引脚,分 7 组,每组 16 个。
物理排布不连续,用 CubeMX 搜索验证。
后续写代码主要控制这批引脚。
GPIO 控制方法后续课程讲解。
第十三部分 工程习惯、避坑与 Q&A 汇总
13.1 工程习惯
知识建立在可靠信源上:DataSheet、Reference Manual、官方源码。
硬件规格查 DataSheet。
外设寄存器与软件编程查 Reference Manual。
中文手册缺失时切英文原版。
遇到陌生型号,即时查表,不靠死记。
读 HAL 源码,理解配置代码与寄存器映射。
使用 CubeMX 辅助配置与验证引脚。
13.2 避坑汇总
51 单片机不需要专门学。
MSP430 不考虑。
GD32 掌握 STM32 后自然迁移。
ESP32 先打 STM32 基础,后续再学。
树莓派不是 MCU,是 Linux 卡片计算机。
标准外设库 2017 年已弃用。
IAR 授权昂贵,不推荐。
CubeIDE 初学不推荐,封装过高。
VS Code 前期仅编辑,后期再接管编译调试。
不要只调 HAL API,要读源码。
不要混淆宿主机与目标机。
不要死记命名,要会查。
不要混淆 DataSheet 与 Reference Manual。
查引脚图认准 LQFP144 与 Pin1。
BOOT0 与 NRST 功能不同,操作顺序先 BOOT0 再 NRST。
VBAT 依赖肖特基二极管低压降实现无缝切换。
13.3 Q&A 汇总
| 问题 | 答案 |
|---|---|
| 还需要学 51 吗? | 不需要,直接 STM32 + HAL 入门 |
| GD32 要专门学吗? | 不用,与 STM32 高度兼容,自然迁移 |
| ESP32 要专门学吗? | 先打 STM32 基础,后续课程有专门板卡 |
| 树莓派和 MCU 是一回事吗? | 不是,树莓派跑 Linux,属于应用层开发 |
| 型号记不住怎么办? | 不死记,建立索引能力,会查即可 |
| 硬件参数信源在哪? | DataSheet 查硬件,Reference Manual 查外设寄存器 |
| 中文手册找不到图? | 切英文原版 DataSheet |
| HAL 库怎么学? | 工具使用 + 源码研读,不能只调 API |