编写者:LCKFB-YZH
版本:v1.0
日期:2026-07-31
更新记录:
- v1.0(2026-07-31):初始版本,介绍 STM32F407VET6 的型号、资源、专业名词、选型方法和天空星应用需求。
一 本章简介
前面我们已经认识了单片机,也回顾了 C 语言、位操作、电源、电阻、电容等基础知识。从这一章开始,主角正式落到天空星 STM32 版本使用的微控制器:STM32F407VET6。
如果读完这一章只记住“168 MHz、512 KB Flash、192 KB SRAM”,那和抄了一遍参数表没有太大区别。我更希望大家弄明白:
- 这些参数分别影响什么。
- 哪些资源可以直接使用,哪些功能还需要外部电路。
- 为什么筑基学习板适合选择资源较多的 F407。
- 为什么真实产品不能只看主频和 Flash 容量。
- 怎样从完整型号中判断封装、引脚数、存储容量和温度等级。
- 怎样区分内核、总线、存储器、外设、时钟、复位和启动方式。
这一章先不写代码,也不接外设。我们先把 STM32F407 拆开来看:内核负责执行任务,存储器保存程序和数据,总线负责传输,外设负责和真实世界打交道,时钟给这些模块提供运行节拍。
为了方便理解,后面会把总线比作道路、把 DMA 比作搬运工。比喻只是帮助大家先把关系串起来,真正做设计和排查问题时,还是要回到地址、数据、时序和寄存器。
NOTE
本章涉及的芯片参数按 DS8626 Rev 12、RM0090 Rev 21 和 Arm Cortex-M4 官方资料整理,板卡差异按天空星各版本的实际配置整理。手册或板卡后续如果更新,请以 ST 和立创开发板官方所发布的最新资料为准,截止目前(26年七月),天空星核心板所售版本的PCB都是V1.0的(包括国产芯片版本)。
1.1 学习目标
| 序号 | 学习目标 | 重要程度 |
|---|---|---|
| 1 | 能够解释 STM32F407VET6 各字段的含义 | ⭐⭐⭐⭐⭐ |
| 2 | 能够区分 STM32F407 的内核、存储器、总线和片上外设 | ⭐⭐⭐⭐⭐ |
| 3 | 能够说明 Flash、普通 SRAM、CCM RAM 和备份 SRAM 的主要差异 | ⭐⭐⭐⭐⭐ |
| 4 | 能够区分 HSI、HSE、LSI、LSE 和 PLL 的用途 | ⭐⭐⭐⭐⭐ |
| 5 | 能够区分复位、启动模式、系统存储器 Bootloader 和用户 Bootloader | ⭐⭐⭐⭐ |
| 6 | 能够从外设、引脚、存储、功耗、封装、生态和供货等维度初步选择 MCU | ⭐⭐⭐⭐ |
| 7 | 知道 Datasheet、Reference Manual、Programming Manual 和 Errata Sheet 分别解决什么问题 | ⭐⭐⭐⭐⭐ |
| 8 | 能够根据项目需求初步判断 STM32 系列或国产 MCU 的选型方向 | ⭐⭐⭐⭐ |
1.2 前置知识
建议先阅读:
- 【2】单片机是什么,建立 MCU、CPU、存储器和外设的整体概念。
- 【5】嵌入式基础知识回顾,回顾进制、位操作、电压、电流和基础电路知识。
- 天空星核心板,了解不同板卡版本和板载资源。
即使暂时没有开发板,也可以学习本章。涉及板卡配置的内容只用于说明 STM32F407 在天空星上的实际落点。
1.3 重点提示
- 不要先看主频再选芯片:外设种类、引脚复用、存储空间、功耗、封装和供应链往往更早决定方案是否可行。
- 筑基学习板选型和产品选型目标不同:筑基学习板希望覆盖更多实验,量产产品则希望在满足需求并保留合理余量的前提下控制成本和功耗。
- 片上有这个外设【不等于】板上可以直接使用:例如 STM32F407 集成以太网 MAC,但要连接网线仍然需要外部 PHY、网络变压器和接口电路。
- 最高主频不等于上电主频:STM32F407 最高可运行到 168 MHz,但上电后要经过电源、Flash 等待周期、PLL 和总线分频等正确配置才能达到该频率。
- 192 KB SRAM 不是一整块同质内存:其中包含 64 KB CCM RAM,DMA 不能访问这部分空间。
- 型号相似不等于完全兼容:更换为 GD32、HC32、AT32、APM32 或其他 MCU 前,必须分别检查硬件、底层软件和量产工具。
1.4 基础概念与术语速查
这些名词后面都会反复出现。第一次看到不用硬背,先知道它属于哪一层、主要管什么,做到再次遇到时不陌生就可以。
| 名词 | 它是什么 | 通常在哪里遇到 | 需要避免的误解 |
|---|---|---|---|
| MCU | Microcontroller Unit,微控制器;把处理器内核、存储器和控制类外设集成在一颗芯片中 | 单片机选型、原理图、固件工程 | MCU 不只是 CPU,也不等同于能运行大型操作系统的 MPU |
| CPU Core | 执行机器指令的处理器内核,例如 Cortex-M4 | 编译器目标、异常、中断和调试 | 内核通常由 Arm 等 IP 厂商提供,整颗 MCU 由芯片厂商完成集成 |
| Flash | 掉电后仍能保存内容的非易失性存储器 | 程序代码、常量、升级分区和参数区 | 它有擦除粒度、写入规则和寿命限制,不能完全当作 SRAM 使用 |
| SRAM | 程序运行时使用的易失性存储器 | 全局变量、栈、堆和通信缓冲区 | 掉电后数据丢失,不同 SRAM 区域的访问能力也可能不同 |
| 主频 | 处理器内核工作的时钟频率,通常以 MHz 表示 | 系统时钟配置、性能估算和功耗评估 | 主频不等于每秒能完成同样数量的 C 语句,也不是唯一性能指标 |
| 封装 | 芯片的机械外形、引脚形式和尺寸,例如 LQFP100 | PCB 封装、焊接、返修和生产测试 | 引脚数量相同不代表引脚定义、焊盘尺寸或电气要求相同 |
| GPIO | General-Purpose Input/Output,通用输入输出 | LED、按键、片选、使能和数字电平控制 | GPIO 的电压、电流、速度和上电状态都有边界 |
| AF | Alternate Function,引脚复用功能 | UART、SPI、I2C、TIM、USB 等外设引脚配置 | 同一引脚同一时刻通常只能选择一种复用功能,必须检查冲突 |
| FPU | Floating-Point Unit,浮点运算单元 | 滤波、姿态解算和控制算法 | STM32F407 的 FPU 是单精度,不是 GPU,也不直接加速所有数学运算 |
| DSP 指令 | 面向乘加、饱和和 SIMD 等信号处理任务的指令扩展 | 音频、滤波和电机控制 | 它不是一颗独立 DSP 芯片,仍由 Cortex-M4 内核执行 |
| DMA | Direct Memory Access,直接存储器访问控制器 | ADC、UART、SPI、SDIO 和音频数据搬运 | DMA 仍需 CPU 配置,也有映射、带宽和可访问存储区限制 |
| NVIC | Nested Vectored Interrupt Controller,嵌套向量中断控制器 | 中断使能、优先级、抢占和异常响应 | NVIC 管理的是中断响应,不负责产生所有中断事件 |
| AHB/APB | MCU 内部连接内核、存储器和外设的总线层级 | 外设时钟、带宽、地址映射和寄存器访问 | “挂在哪条总线”会影响时钟上限,但不能只靠道路比喻推导硬件细节 |
| PLL | Phase-Locked Loop,锁相环 | 系统主频、USB 48 MHz 和部分外设时钟生成 | PLL 不是简单乘法器,输入范围、分频和输出范围都有约束 |
| Bootloader | 在主应用之前运行的启动或升级程序 | 串口、USB、CAN、网络和存储介质升级 | ST 固化的系统 Bootloader 与用户自行编写的 Bootloader 不是同一个程序 |
| ISP | In-System Programming,在系统内编程 | 不拆芯片完成下载或升级 | ISP 描述编程方式,不特指串口,也不等同于 IAP 或 DFU |
| SWD | Serial Wire Debug,Cortex-M 常用调试接口 | 下载、断点、单步、寄存器和内存查看 | SWD 是接口协议;ST-Link、J-Link、CMSIS-DAP 是调试器或调试方案 |
| 5 V 容忍 | 满足数据手册条件时,特定数字引脚可承受高于 VDD 的输入电平 | 连接 5 V 逻辑器件 | 不是所有引脚、所有模式和所有供电状态都支持 5 V 输入 |
TIP
可以先把 MCU 看成一座微型工厂:内核执行任务,Flash 保存程序,SRAM 摆放运行数据,总线负责运输,外设连接真实世界,时钟提供节拍,NVIC 处理需要优先响应的事件。
二 从天空星认识 STM32F407
2.1 STM32F407 是什么
STM32 是意法半导体(STMicroelectronics,ST)推出的 32 位微控制器家族,主要采用 Arm Cortex-M 内核。STM32F407 不是整个 STM32 家族的统称,而是 STM32F4 高性能产品中的一个具体子系列。
在入门阶段,可以把 STM32 理解为 ST 推出的 32 位微控制器产品家族:ST 对应厂商,M 帮助记忆 Microcontroller,32 表示这一产品家族面向 32 位架构。这个拆法用于建立直觉,不是完整订购型号的官方编码规则;真正拆解具体型号时仍要看数据手册的 Ordering information。
STM32 的价值也不只来自芯片本身。STM32CubeMX、STM32CubeIDE、HAL/LL、设备包、开发板、调试工具、官方文档和第三方生态共同决定了学习与开发效率。对初学者和交付周期紧张的项目而言,能否快速找到可信资料、复现例程和定位问题,往往比多出几十 MHz 的主频更重要。
STM32F407 集成了:
- Arm Cortex-M4 内核。
- 单精度浮点运算单元(Floating-Point Unit,FPU)。
- 数字信号处理(Digital Signal Processing,DSP)指令。
- Flash、SRAM、时钟、复位和电源管理。
- GPIO、定时器、ADC、DAC、DMA。
- USART/UART、SPI、I2C、CAN、USB、SDIO、以太网 MAC 等通信资源。
从软件到硬件动作的大致链路如下:
flowchart LR
A["C/C++ 程序"] --> B["编译后的机器指令"]
B --> C["Cortex-M4 内核执行"]
C --> D["通过 I-Code、D-Code、System 等总线发起访问"]
D --> E["Flash、SRAM 或外设寄存器"]
E --> F["GPIO 电平、定时器波形、通信数据或存储操作"]
这张图先把程序到硬件动作的路径串起来。等真正分析总线仲裁、主从设备和访问路径时,再去看 DS8626 与 RM0090 里的系统架构图。
2.2 为什么天空星选择 STM32F407
我们给天空星 STM32 版本选择 F407,并不是因为它最便宜或者性能最强,而是因为这颗芯片在性能、外设、封装和资料之间比较均衡,适合拿来做一块综合学习板。
| 选择原因 | 对学习的帮助 | 工程上需要注意 |
|---|---|---|
| Cortex-M4F,最高 168 MHz | 能覆盖基础控制、通信、滤波、音频和网络等实验 | 高主频会增加功耗、时钟和电源设计要求 |
| 512 KB 或 1 MB Flash | 能容纳 HAL、文件系统、协议栈和较复杂例程 | 量产产品仍应评估实际占用,避免无意义堆配置 |
| 192 KB 主 SRAM | 比经典入门型号更容易承载缓冲区和复杂应用 | 其中 64 KB 为 DMA 不可访问的 CCM RAM |
| 片上外设丰富 | 可以系统学习 CAN、USB、SDIO、以太网和多种定时器 | 外设引脚存在复用冲突,不代表都能同时使用 |
| LQFP100 封装 | 引脚较多,焊接、检查和返修难度低于 BGA | 芯片和 PCB 占用面积不适合极小型产品 |
| 官方资料和生态成熟 | 容易获得手册、库、调试器和工程案例 | 老型号的生态优势不代表它适合所有新产品 |
对初学者来说,F407 的好处是不会刚学到一半就被 Flash、RAM 或外设数量卡住。大家可以先学 GPIO、定时器、串口、ADC 和 DMA,再继续做 CAN、SDIO、USB、以太网等实验。
但真做产品时就不能照这个思路堆资源了。设备如果只需要几个 GPIO、一个串口和很小的程序空间,使用 F407 反而会多出成本、功耗和 PCB 面积。
TIP
学习阶段可以选择资源宽裕的平台,把精力放在原理、调试和工程方法上;进入量产阶段后,再根据真实资源占用和风险评估进行降规格选型。
2.3 F407 适合与不适合的场景
比较适合的场景:
- 系统学习 STM32 外设体系。
- 需要多路 UART、SPI、I2C、CAN、定时器和 DMA 的控制器原型。
- 需要单精度 FPU 和 DSP 指令执行滤波、控制或姿态算法。
- 需要 SDIO、USB OTG、以太网 MAC、DCMI 或外部存储器接口的评估项目。
- 对实时控制能力有要求,但暂时不需要 Cortex-M7 或更高性能平台的项目。
通常不优先选择的场景:
- 纽扣电池供电并长期休眠的极低功耗节点。
- 成本和 PCB 面积非常敏感的简单控制产品。
- 需要复杂大屏 GUI、大容量图像缓存或视频处理的设备。
- 依赖现代安全隔离、TrustZone、硬件密钥管理或更高等级安全能力的新项目。
- 需要 CAN FD、片上无线或专用 AI 加速器,但又不希望增加外部芯片的项目。
先用这些场景做第一轮筛选就行,最后还是要把功能、性能、功耗、成本和团队经验放在一起算。
2.4 天空星 STM32 版本之间的差异
目前天空星 STM32 版本有三种配置(暂不介绍国产芯片版本):
| 版本 | 主控 | 片内 Flash | 高速外部时钟 | 低速外部时钟 | 其他关键装配差异 |
|---|---|---|---|---|---|
| 青春版 | STM32F407VET6 | 512 KB | 8 MHz HSE | 预留焊盘,默认未贴 | W25Q128 SPI Flash 默认未贴 |
| 高配版 | STM32F407VGT6 | 1 MB | 8 MHz HSE | 32.768 kHz LSE 已贴 | W25Q128 SPI Flash 已贴 |
| 焊接排针版 | STM32F407VET6 | 512 KB | 8 MHz HSE | 32.768 kHz LSE 已贴 | W25Q128 SPI Flash 默认未贴 但 核心板外扩排针和调试排针已焊接 |
因此,VET6 和 VGT6 的芯片主要差异是片内 Flash 容量,但两块开发板的装配配置并不只有 Flash 不同。要注意:目前焊接排针版只搭配筑基学习板售卖,还未单独上架,主要是因为其焊接排针的人工成本比较高。
几乎所有 GPIO、定时器、串口和 ADC 实验都可以共用代码。涉及链接脚本、芯片选型宏、程序容量、外部 SPI Flash 或 LSE 的实验时,必须确认当前板卡版本。
三 读懂 STM32F407VET6 型号
3.1 完整型号包含哪些信息
根据 DS8626 的订购信息,STM32F407VET6 可以拆成:
STM32 F 407 V E T 6
│ │ │ │ │ │ └─ 温度范围代码:工业级,-40~85 ℃
│ │ │ │ │ └──── 封装代码:LQFP
│ │ │ │ └─────── Flash 容量代码:512 KB
│ │ │ └────────── 引脚数代码:100 引脚
│ │ └────────────── 子系列:连接功能、摄像头接口和以太网
│ └────────────────── 产品类型:通用型
└────────────────────── Arm 内核的 32 位 STM32 微控制器2
3
4
5
6
7
8
| 字段 | 本型号中的值 | 含义 |
|---|---|---|
| 器件家族 | STM32 | 基于 Arm 的 32 位微控制器 |
| 产品类型 | F | General-purpose,通用型 |
| 子系列 | 407 | STM32F40xxx,包含连接功能、DCMI 和以太网 |
| 引脚数 | V | 100 引脚 |
| Flash | E | 512 KB |
| 封装 | T | LQFP |
| 温度等级 | 6 | 工业温度范围,环境温度 -40~85 ℃ |
IMPORTANT
型号编码必须结合对应系列的数据手册解释。某个字母在一个系列中的含义,不能未经核对直接套用到所有 STM32 系列。
3.2 VET6 与 VGT6 的芯片差异
STM32F407VET6 和 STM32F407VGT6 只有 Flash 容量代码不同:
| 项目 | STM32F407VET6 | STM32F407VGT6 |
|---|---|---|
| 引脚数 | 100 | 100 |
| 封装 | LQFP100 | LQFP100 |
| 最高 CPU 频率 | 168 MHz | 168 MHz |
| 主 SRAM | 192 KB | 192 KB |
| 备份 SRAM | 4 KB | 4 KB |
| 片内 Flash | 512 KB | 1 MB |
3.3 为什么不能背一张通用型号代码表
STM32 家族跨度很大,不同代际和产品线会使用不同的容量、封装、温度和选项代码。如果只背一张网络上流传的“STM32 型号速查表”,容易出现三个问题:
- 把其他系列存在的容量代码套到 F407。
- 把引脚数代码和封装代码错误地一一绑定。
- 忽略订购型号末尾的封装、温度、包装和预编程选项。
我更推荐按下面的顺序查:
- 找到完整型号。
- 打开该型号的 ST 官方产品页。
- 下载产品页关联的 Datasheet。
- 查找
Ordering information。 - 用数据手册中的订购规则逐项拆解。
其他厂商的 MCU 也可以按这个顺序查。记住去哪里找订购信息,比背一张不知道适用范围的代码表可靠得多,大家自己在选择国产替代芯片时也可以以这个为选择顺序。
3.4 怎样理解常见 Flash 容量代码
在许多 STM32 型号中,Flash 容量会用一个字符表示。下面这张表适合帮助建立阅读直觉,但它不是可以脱离数据手册使用的通用订购表。
| 常见代码 | 常见容量含义 | 阅读时的正确做法 |
|---|---|---|
4 | 16 KB | 确认目标系列是否提供该容量 |
6 | 32 KB | 检查完整订购型号和封装 |
8 | 64 KB | 不要从其他系列直接类推 |
B | 128 KB | 同一系列也可能只有部分封装可选 |
C | 256 KB | 同时核对 SRAM 和外设数量是否变化 |
E | 512 KB | STM32F407VET6 使用该代码 |
G | 1 MB | STM32F407VGT6 使用该代码 |
I | 2 MB | 仅表示常见编码含义,不代表 F407 提供该容量 |
对 STM32F405/407 而言,DS8626 Rev 12 的订购信息只列出:
E:512 KB Flash。G:1 MB Flash。
所以,不能因为在其他 STM32 系列中见过 B、C 或 I,就相信存在相应容量的 STM32F407 订购型号,常规开发时,我们一般会先选择容量较大的型号,等开发接近尾声时就可以确定是否要
3.5 STM32F405/407 的引脚数和封装代码
DS8626 对 STM32F405/407 给出的引脚数代码如下:
| 引脚数代码 | 引脚数量 | 常见理解 |
|---|---|---|
R | 64 | 较小 LQFP 封装级别 |
O | 90 | WLCSP 引脚级别 |
V | 100 | 天空星使用的引脚级别 |
Z | 144 | 更多 GPIO 和外设引出 |
I | 176 | 该系列的大引脚数级别 |
对应的封装代码为:
| 封装代码 | 封装类型 | 工程关注点 |
|---|---|---|
T | LQFP | 引脚可见,便于打样、检查和返修 |
H | UFBGA | 占用面积较小,但 PCB、焊接和检测要求更高 |
Y | WLCSP | 尺寸紧凑,对 PCB 工艺和装配能力要求高 |
对于入门学习、实验板和小批量打样,如果尺寸允许,LQFP 通常更容易焊接、观察、返修和测量,BGA必须要X-RAY才能检查焊球质量。
IMPORTANT
引脚数代码和封装代码是两个独立字段,不应把“100 引脚”和“LQFP”视为永远绑定。还要继续查数据手册的器件列表,确认目标引脚数、Flash 容量、封装和温度等级的组合确实可以大批量采购,对研发人员来说最可怕的事就是产品开发完了,采购却发现这个组合的芯片不好买。
四 STM32F407VET6 的核心能力
4.1 参数总览
先用下面这张表认识整颗芯片。容量单位沿用 ST 手册里的 KB 写法,在这里按芯片存储器常用的二进制容量理解。
| 项目 | STM32F407VET6 | 工程含义 |
|---|---|---|
| CPU 内核 | Arm Cortex-M4 | 32 位处理器内核,面向实时控制和信号处理 |
| 最高 CPU 频率 | 168 MHz | 是正确供电、时钟和 Flash 配置下的上限,不是上电默认值 |
| FPU | 单精度 | 可加速符合条件的 float 运算,不支持硬件双精度 |
| DSP 能力 | DSP/SIMD 指令 | 有利于乘加、饱和运算和部分信号处理算法 |
| MPU | 内存保护单元 | 可设置区域访问属性,但不是虚拟内存管理单元 |
| 片内 Flash | 512 KB | 保存程序、只读常量和部分非易失数据 |
| 普通 SRAM | 128 KB | SRAM1 112 KB + SRAM2 16 KB,可被 CPU 和 DMA 使用 |
| CCM RAM | 64 KB | 与内核紧耦合,适合 CPU 高频访问,DMA 不能访问 |
| 备份 SRAM | 4 KB | 位于备份域,需要正确供电和软件配置 |
| OTP | 512 B | 一次性可编程区域,使用前必须评估不可逆风险 |
| 工作电压 | 1.8~3.6 V | 常规开发板通常使用 3.3 V;不能把 3.6 V 当成推荐电压,天空星开发板都是3.3V的电平 |
| 封装 | LQFP100 | 14 mm × 14 mm 本体,0.5 mm 引脚间距 |
| 可用 I/O | 82 个 | 具体可用数量还会受到电源、晶振、调试和板载连接占用影响 |
| 工作温度代码 | 6 | 工业级环境温度 -40~85 ℃ |
NOTE
数据手册首页经常写“up to”,表示同一系列中最高配置的能力。查询 STM32F407VET6 时,还要继续查看器件资源表和对应封装,不能把 176 引脚型号的全部资源数量套到 LQFP100 型号。
4.2 Cortex-M4 与 Cortex-M4F
Arm 提供 Cortex-M4 处理器内核设计,ST 公司将这个内核与自己的 Flash、SRAM、总线和外设集成,形成 STM32F407。
FPU 在 Cortex-M4 中属于可选模块。STM32F407 集成了单精度 FPU,因此工程资料中常写成 Cortex-M4F,其中 F 用于强调带浮点单元。
FPU 的价值主要体现在:
- 单精度浮点滤波。
- 姿态解算。
- 电机和运动控制算法。
- 音频和信号处理。
- 需要较多
float运算的数学模型。
但【芯片带 FPU】不代表所有浮点代码都会自动获得最佳性能。还要确认:
- 编译器目标架构选择了 Cortex-M4。
- 浮点 ABI 和 FPU 指令选项配置正确。
- 启动代码或系统初始化正确使能 FPU。
- 算法使用的是单精度
float,而不是大量双精度double。 - 中断或 RTOS 正确保存浮点上下文。
4.3 FPU、DSP 和 MPU 不是什么
几个缩写容易被误解:
- FPU 不是 GPU:它能加速浮点计算,但是图形处理器。
- DSP 指令不等于独立 DSP 芯片:它们是内核指令扩展,仍由 Cortex-M4 执行。
- MPU 不是 MPU 处理器:这里的 MPU 是 Memory Protection Unit,即内存保护单元;树莓派或 Linux SoC 语境中的 MPU 通常是 Microprocessor Unit,即微处理器。
- MPU 也不是 MMU:STM32F407 的 MPU 可做区域保护,但不提供 Linux 常用的完整虚拟地址转换能力。
第一次碰到缩写,先看英文全称和所在章节,别只凭三个字母猜意思。
4.4 外设资源不能只数数量
STM32F407 系列拥有较丰富的片上外设。对于 VET6,常用资源可以这样理解:
| 类别 | 主要资源 | 使用时还要检查 |
|---|---|---|
| 数字输入输出 | GPIO、外部中断 | 当前封装、5 V 容忍引脚、复用冲突和板载占用 |
| 定时与控制 | TIM1~TIM14 | 位宽、通道数、总线时钟、互补输出和引脚映射 |
| 模拟功能 | 3 个 12 位 ADC、2 个 12 位 DAC | 通道是否在当前封装引出、参考电压、采样时间和模拟前端,比如说天空星开发板的DAC就在外部Flash那几个脚上,使用前需要注意 |
| 串行通信 | 4 个 USART、2 个 UART | 引脚复用、总线频率、DMA 映射和电平转换 |
| 同步通信 | 3 个 SPI、3 个 I2C、2 个 I2S | 引脚复用、上拉、片选、时序和总线负载 |
| 工业通信 | 2 个 bxCAN | 需要外部 CAN 收发器和正确终端匹配,不支持 CAN FD |
| 存储与显示 | SDIO、FSMC | 需要外部存储器、卡座、总线布线和足够引脚 |
| USB | USB OTG FS、USB OTG HS 控制器 | 真正的 USB HS 需要外部 ULPI PHY;接口还需考虑 VBUS 和 ESD |
| 网络 | 10/100 Mbit/s Ethernet MAC | 需要外部 PHY、参考时钟、网络变压器和网口 |
| 图像采集 | DCMI | 需要外部图像传感器、时钟和足够的数据吞吐能力 |
| 数据搬运 | DMA1、DMA2 | 外设到 DMA 的映射固定,且不能访问 CCM RAM |
IMPORTANT
MCU 集成的是控制器、接口或 MAC 时,外围模拟器件、物理层收发器、连接器和保护电路通常仍不可少。选型时不能只看到外设名称就认为硬件功能已经完整。不过目前部分芯片也会直接在内部集成部分phy了。
4.5 为什么官方写【最多 17 个定时器】?
STM32F407 的 TIM1~TIM14 一共是 14 个可编程定时器外设,其中包含:
- 2 个高级控制定时器。
- 10 个通用定时器,其中包含 16 位和 32 位类型。
- 2 个基本定时器。
数据手册标题中的 17 timers 还把以下资源纳入统计:
- 独立看门狗(Independent Watchdog,IWDG)。
- 窗口看门狗(Window Watchdog,WWDG)。
- Cortex-M4 内核的 SysTick 定时器。
所以, 14 个定时器 和 最多 17 个定时器 都可能在资料里出现,只是统计口径不同。
五 存储器、总线与数据搬运
5.1 Flash 和 SRAM 的根本区别
Flash 是非易失性存储器,掉电后内容仍然保留。编译生成的程序代码、只读常量和中断向量表通常存放在片内 Flash。和电脑的硬盘可以等效理解。
SRAM 是易失性存储器,掉电后内容丢失。全局变量、静态变量、栈、堆和通信缓冲区主要在 SRAM 中。和电脑的运行内存可以等效理解。
可以把它们分别类比为:
- Flash:掉电后仍保存内容的文件柜。
- SRAM:程序运行时使用的工作台,每天下班就会清理。
这个比喻的需要重点强调的是:MCU 不会像电脑文件系统那样自动管理 Flash 和 SRAM。变量具体放在哪里,由链接脚本、启动文件、编译器属性和程序设计指定共同决定,不过一般初学者都是用默认的链接脚本即可。
5.2 192 KB SRAM 为什么不是一整块
STM32F407VET6 的主 SRAM 由三部分组成:
| 区域 | 容量 | CPU 访问 | DMA 访问 | 典型用途 |
|---|---|---|---|---|
| SRAM1 | 112 KB | 支持 | 支持 | 全局变量、堆、栈、通信和 DMA 缓冲区 |
| SRAM2 | 16 KB | 支持 | 支持 | 普通数据、独立缓冲区或故障隔离 |
| CCM RAM | 64 KB | 支持 | 不支持 | CPU 高频访问的数据、算法工作区 |
此外还有 4 KB 备份 SRAM,它属于备份域,不应和上面的 192 KB 主 SRAM 混为一谈。
很多工程的链接脚本只声明 128 KB 普通 SRAM,原因不是芯片【少了 64 KB】,而是默认没有把 CCM RAM 并入通用内存池。这样做可以避免开发者不知情地把 DMA 缓冲区放进 CCM,造成不可预知的BUG。
WARNING
UART、SPI、ADC、SDIO 或其他 DMA 缓冲区如果被链接到 CCM RAM,CPU 可以正常读写,但 DMA 无法访问,常见表现是数据不更新、传输错误或外设看似卡死。
5.3 CCM RAM 适合放什么
核心耦合存储器(Core-Coupled Memory,CCM)直接服务于内核的数据访问,适合:
- 滤波和控制算法的临时数组。
- CPU 高频访问、但不需要 DMA 的查找表。
- 对确定性访问时间敏感的工作数据。
- 明确由 CPU 独占的数据。
- 比如说可以作为RTOS的堆栈来使用。
不适合:
- ADC DMA 采样缓冲区。
- UART/SPI DMA 收发缓冲区。
- 需要由 DMA 搬运的显示、音频或存储数据。
- 驱动和中间件内部可能交给 DMA 的内存。
使用 CCM 前,必须在链接脚本中建立独立段,并通过链接映射文件确认变量的最终地址,而不是只看源代码中的声明。
5.4 备份 SRAM 与普通掉电保存不是一回事
备份 SRAM 位于备份域。它可以在主电源掉电、VBAT 仍满足条件时保存少量数据,但需要:
- 硬件上正确连接备份域电源。
- 软件使能电源控制时钟和备份域访问。
- 软件使能备份 SRAM 时钟及相关供电保持功能。
- 评估电池容量、漏电和掉电时间。
它适合保存少量状态、计数或校准信息,但不能自动替代 EEPROM、外部 Flash 或可靠的掉电保存方案。数据完整性、版本、校验和异常断电处理必须由软件设计保证。
5.5 总线就像道路系统
STM32F407 内部使用多层 AHB 总线矩阵和 APB 外设总线。总线决定谁能够访问谁、最高能跑多快,以及多个主设备同时访问时如何仲裁。
flowchart TD
CORE["Cortex-M4 内核"] --> MATRIX["多层 AHB 总线矩阵"]
DMA1["DMA1"] --> MATRIX
DMA2["DMA2"] --> MATRIX
MATRIX --> FLASH["Flash 接口"]
MATRIX --> SRAM["SRAM1 / SRAM2"]
MATRIX --> AHB1["AHB1:GPIO、DMA 等"]
MATRIX --> AHB2["AHB2:USB OTG FS、RNG、DCMI 等"]
MATRIX --> AHB3["AHB3:FSMC"]
MATRIX --> APB1["APB1:低速外设域"]
MATRIX --> APB2["APB2:高速外设域"]
CCM["CCM RAM"] --- CORE
DMA1 -. "不可访问" .-> CCM
DMA2 -. "不可访问" .-> CCM
这张图用来认清各模块的大致关系。需要确认某个外设挂在哪条总线、经过哪级桥接、DMA 能不能访问时,直接查 RM0090,不要拿这张简图代替参考手册。
5.6 AHB、APB1 和 APB2
在常见的 168 MHz 系统配置下:
| 时钟域 | 数据手册上限 | 常见外设示例 |
|---|---|---|
| AHB/HCLK | 168 MHz | CPU 总线、存储器、GPIO、DMA |
| APB1/PCLK1 | 42 MHz | USART2/3、UART4/5、I2C、SPI2/3、CAN、TIM2~7 等 |
| APB2/PCLK2 | 84 MHz | USART1/6、SPI1、ADC、SDIO、TIM1/8 等 |
这里有一个容易混淆的细节:当 APB 预分频器不为 1 时,对应总线上的定时器输入时钟通常会自动变为 2 × PCLK。因此在典型配置中:
- APB1 外设时钟可以是 42 MHz,而部分 APB1 定时器时钟是 84 MHz。
- APB2 外设时钟可以是 84 MHz,而部分 APB2 定时器时钟是 168 MHz。
所以计算 PWM、输入捕获或定时中断周期时,不能直接把 PCLK 当作定时器时钟,必须检查 RCC 配置和参考手册中的定时器时钟规则。
5.7 DMA 为什么像搬运工
直接存储器访问(Direct Memory Access,DMA)可以在外设和存储器之间搬运数据,减少 CPU 逐字节处理的负担。
DMA 适合:
- ADC 连续采样。
- UART 大量接收和发送。
- SPI 屏幕、Flash 或传感器数据传输。
- 音频数据流。
- 存储器之间的数据搬运。
但 DMA 不是 配置后绝对不会出错 的自动工具。仍要检查:
- 外设对应哪个 DMA 控制器、数据流和通道。
- 源地址、目标地址和数据宽度是否正确。
- 缓冲区是否位于 DMA 可访问的 SRAM。
- 循环、双缓冲和普通模式是否符合需求。
- 中断标志、溢出、半传输和传输错误如何处理。
- CPU 与 DMA 同时访问缓冲区时的数据一致性。
六 时钟、复位、启动与调试
6.1 HSI、HSE、LSI、LSE 和 PLL
时钟决定 CPU、总线和外设按什么节拍工作。
| 名称 | 英文全称 | 来源 | STM32F407 中的典型用途 |
|---|---|---|---|
| HSI | High-Speed Internal | 片内高速 RC,标称 16 MHz | 上电默认时钟、启动和部分系统运行,这个坏了,及时你外部晶振没问题,系统也没法正常启动了 |
| HSE | High-Speed External | 外部高速晶振或外部时钟 | 高精度系统时钟源、PLL 输入、特定 USB/CAN 启动场景 |
| LSI | Low-Speed Internal | 片内低速 RC | IWDG、精度要求不高的低速时钟 |
| LSE | Low-Speed External | 外部 32.768 kHz 晶振 | RTC 和长期时间保持 |
| PLL | Phase-Locked Loop | 对输入时钟倍频和分频 | 生成 168 MHz 系统时钟及其他所需时钟 |
天空星 STM32 核心板使用 8 MHz HSE。青春版默认没有焊接 LSE,高配版和焊接排针版已经焊接 32.768 kHz LSE。在运行有关RTC的程序时一定要注意,假如没有外部低速晶振你却用了,就会造成程序的卡死问题。
6.2 为什么外部晶振不是所有功能的硬性前提
外部晶振通常具有更好的频率精度和温度稳定性,但不能简单认为【串口、USB、以太网都必须使用 HSE】,只能说有条件的话建议还是要配备外部高速晶振。
- 普通 UART 在波特率误差满足双方容差时,可以使用 HSI 派生时钟。
- USB 需要满足严格的 48 MHz 时钟要求,必须正确配置时钟源和 PLL,不能只看 CPU 是否运行到 168 MHz。
- 以太网 RMII/MII 还涉及外部 PHY 和参考时钟方案,不能只由 MCU 的 HSE 一句话决定。
实际做项目时,先查目标外设允许多大的时钟误差、能选哪些时钟源,再回来设计时钟树。不要一看到内部 RC 就判定不能用,也不要认为焊了外部晶振就一定不会出问题。
6.3 从 8 MHz 到 168 MHz 发生了什么
常见系统时钟配置会把 8 MHz HSE 送入 PLL(比如说我们的天空星开发板用的晶振就是8M的,其他家的开发板可能并不是这个规格的晶振),经过预分频、倍频和输出分频,得到最高 168 MHz 的系统时钟。
但完整配置不只包括 PLL:
- 确认电源电压和电压调节器等级满足目标频率。
- 设置 Flash 等待周期、预取和缓存。
- 配置 HSE 和 PLL 参数。
- 等待 HSE 与 PLL 稳定。
- 设置 AHB、APB1 和 APB2 分频,不能超过各自上限。
- 切换系统时钟源。
- 更新软件中的系统时钟变量。
- 验证 USB、SDIO、ADC 和定时器等外设时钟。
如果只把 PLL 输出改为 168 MHz,却没有同步处理 Flash 等待周期和总线分频,系统可能出现启动失败、随机异常或外设超频。这些如果你用固件库,比如说HAL库的话就不会有这个问题,库里面都给你处理好了。
6.4 复位不只是按下 NRST
复位(Reset)会把处理器和大量外设恢复到定义状态,再从复位向量表重新开始执行。常见复位来源包括:
- 上电复位(Power-On Reset,POR)。
- 掉电复位(Power-Down Reset,PDR)。
- 欠压复位(Brown-Out Reset,BOR)。
- 外部
NRST引脚。 - 软件系统复位。
- 独立看门狗复位。
- 窗口看门狗复位。
程序启动后,可以读取 RCC 的复位状态标志判断上一次复位原因。产品中记录复位原因非常有价值,它能帮助区分:
- 用户主动复位。
- 电源不稳定。
- 软件主动重启。
- 程序跑飞后被看门狗恢复。
读取后要按参考手册要求清除标志,否则下一次启动可能无法准确判断。
6.5 启动模式决定从哪里取第一条指令
STM32F407 可根据启动配置从不同存储区域启动,常见来源包括:
- 用户 Flash。
- 系统存储器。
- SRAM。
STM32F407 在复位过程中采样 BOOT0 和 BOOT1。其中 BOOT1 与 PB2 复用。常见选择关系如下:
| BOOT1 | BOOT0 | 启动区域 | 典型用途 |
|---|---|---|---|
| 任意 | 0 | 用户 Flash | 正常运行用户程序 |
| 0 | 1 | 系统存储器 | 进入 ST 固化的 ROM Bootloader |
| 1 | 1 | SRAM | 调试或特殊启动场景 |
启动配置在复位时被采样,进入用户程序后,复用的引脚仍可按参考手册规定配置为普通 GPIO。BOOT 引脚不能悬空,开发板通常会使用上下拉和按键建立确定的默认启动状态;具体电路要以当前版本原理图为准。
在常规 SWD 下载和运行场景中,程序保存在用户 Flash,复位后从用户程序的向量表开始执行。
系统存储器中保存的是 ST 在生产时写入的 ROM Bootloader。进入该模式后,可以使用芯片和 Bootloader 版本支持的串行接口下载程序。精确接口、引脚、时钟要求和已知限制必须查 AN2606,不能从其他 STM32 型号类推。
6.5.1 天空星开发板如何进入系统存储器
天空星开发板已经把启动选择电路做到了板上。板子上方三个按键中,最右侧是丝印为 BOOT0 的启动按键,在天空星开发板原理图说明中也称为 DFU 按键。它与启动引脚的关系如下:
- 未按下
BOOT0按键时,BOOT0由下拉电阻保持为低电平。 - 按住
BOOT0按键时,BOOT0被拉到高电平。 BOOT1/PB2由板载下拉电阻保持为低电平,所以按住BOOT0再复位,芯片采样到的启动配置就是BOOT1=0、BOOT0=1,从系统存储器启动。
开发板已经上电时,推荐按下面的顺序操作:
- 按住
BOOT0按键,不要松开。 - 按下并松开
RESET复位按键,期间继续按住BOOT0。 - 松开
BOOT0按键。
也可以在断电状态下进入:
- 断开开发板的所有供电。
- 按住
BOOT0按键,不要松开。 - 重新接通电源;如果准备使用 USB DFU,可以直接插入连接电脑的 Type-C 数据线。
- 松开
BOOT0按键。
IMPORTANT
BOOT0 和 BOOT1 只在复位或上电启动过程中被采样。程序正在运行时,只按一下 BOOT0 而不复位,不会立即切换到系统存储器;进入系统 Bootloader 后再松开 BOOT0,也不会立即退回用户程序。
通过天空星的 Type-C 接口使用 USB DFU 时,进入成功后通常可以在 Windows 设备管理器中看到 STM32 BOOTLOADER 或 STM32 DFU 设备。驱动安装、浏览器连接和固件烧录步骤可继续查看天空星 STM32F407 WebUSB DFU 在线刷写工具教程。
需要重新运行用户程序时,先松开 BOOT0,再按一次 RESET 或重新上电。此时 BOOT0 恢复为低电平,芯片会重新从用户 Flash 启动。
6.6 Bootloader、ISP 和 DFU 的区别
- 系统存储器 Bootloader:ST 固化在芯片内部 ROM 中的下载程序。
- 用户 Bootloader:开发者写入用户 Flash 的启动和升级程序,可以实现串口、CAN、网络、SD 卡或其他升级策略。
- ISP(In-System Programming):在系统内编程的概念,可以通过多种接口完成,不特指某一个 Bootloader。
- DFU(Device Firmware Upgrade):USB 的设备固件升级类,不能把所有串口或 CAN 升级都称为 DFU。
系统 Bootloader 不理解你的完整产品结构。它不会自动识别外部 TF 卡上的固件,也不会自动执行产品自定义的签名校验、双分区回滚和掉电保护。这些能力需要用户 Bootloader 或专用升级框架实现。
6.7 Option Bytes 为什么要谨慎操作
选项字节(Option Bytes)用于配置启动、读保护、写保护、BOR、看门狗方式等底层行为。
它们具有三个特点:
- 影响范围大,配置错误可能导致无法按预期启动或调试。
- 某些保护级别的切换会触发擦除或具有不可逆风险。
- 修改后通常需要重新加载选项字节或复位才能生效。
CAUTION
修改读保护、写保护、启动和看门狗相关 Option Bytes 前,必须先阅读当前芯片数据手册、RM0090 的 Flash/Option Bytes 章节和勘误说明,并备份固件。不要在不了解恢复路径时尝试最高保护等级。
6.8 SWD、JTAG、SWO、ST-Link 和 DAPLink
这些名词处在不同层级:
| 名称 | 类别 | 作用 |
|---|---|---|
| SWD | 调试接口协议 | 使用 SWDIO、SWCLK 等较少信号完成下载和调试 |
| JTAG | 调试与测试接口协议 | 使用更多信号,可用于调试和边界扫描 |
| SWO | 单线跟踪输出 | 可输出 ITM 调试信息和部分运行跟踪数据 |
| ST-Link | 调试器产品/方案 | 常用于 STM32 下载、单步、断点和寄存器查看 |
| CMSIS-DAP | 调试探针协议规范 | 让主机调试软件通过标准协议控制调试器 |
| DAPLink | 开源调试器固件方案 | 通常提供 CMSIS-DAP,并可扩展拖放下载和串口等功能 |
我们通常使用 SWD,因为它占用引脚少,又能满足下载、断点、单步和变量查看等常见需求。
调试器不只是 烧录器 。一个完整调试过程还需要使用:
- 断点。
- 单步执行。
- 变量和内存查看。
- 外设寄存器查看。
- 调用栈。
- Watchpoint 数据断点。
- SWO/ITM 或其他跟踪方式。
七 从项目需求进行 MCU 选型
7.1 选型不是寻找参数最大的芯片
做产品选型时,我们一般先问的不是 哪颗芯片最强 ,而是:
在满足功能、实时性、可靠性和生命周期要求的前提下,哪颗芯片的综合风险最低?
刚好够用 也不等于把资源卡到极限。合理选型需要保留余量,以容纳:
- 软件功能增长。
- 调试日志和诊断功能。
- 协议栈或第三方库升级。
- 缓冲区峰值。
- 硬件改版和引脚调整。
- 供应链替代。
例如,当前固件已经占用 180 KB Flash,就不应选择只比它大一点的容量;还要为日志、协议升级、双分区升级和后续需求预留空间。当前设计使用了 42 个 GPIO,也不能只核对芯片标称可用 I/O 数量,还要扣除电源、晶振、调试、BOOT、板载外设和复用冲突占用。
7.2 推荐的选型流程
flowchart TD
A["列出功能与验收条件"] --> B["换算为外设、GPIO、ADC、PWM 和通信需求"]
B --> C["制作引脚复用与资源冲突表"]
C --> D["估算 CPU、Flash、SRAM、带宽和实时性"]
D --> E["核对电压、温度、功耗和接口电平"]
E --> F["选择封装并评估 PCB、焊接和测试能力"]
F --> G["评估 SDK、工具、资料、团队经验和授权"]
G --> H["评估价格、供货、生命周期和第二来源"]
H --> I["选择候选型号并制作样机"]
I --> J{"关键外设与边界验证通过?"}
J -- "否" --> B
J -- "是" --> K["冻结型号并保留合理余量"]
这套流程看起来比直接挑一颗高主频芯片慢,实际上能省掉后面改板、换料和重新验证的大量时间。
在 STM32 项目中,可以使用 STM32CubeMX 或 ST 的产品选择器辅助检查引脚复用、时钟和外设组合。但图形化工具只是交叉验证手段,电气边界、勘误、启动条件和封装细节仍要回到官方资料确认。候选型号确定后,还应购买样片或开发板,实测项目最关键、风险最高的外设。天空星系列开发板就是为了国产替代而生的,我们在设计之初就考虑了和各种国产芯片的兼容替代,目前也已经推出了HC和GD系列的国产芯片天空星版本,其PCB完全一致,只不过所贴器件不一样,大家完全可以学习时用STM32版本,实际做项目了用国产芯片版本。
7.3 选型前至少回答十个问题
| 问题 | 需求示例 | 常见遗漏 |
|---|---|---|
| 需要多少 GPIO? | LED、按键、继电器、编码器、片选和使能 | 电源、晶振、调试、BOOT 和板载功能会占用引脚 |
| 需要哪些通信接口? | UART、SPI、I2C、CAN、USB 和以太网 | 有多个外设实例不代表引脚可以同时无冲突地引出 |
| 需要多少 PWM、捕获和编码器通道? | 电机、舵机、风扇、PWM 调光和脉冲测量 | 只数定时器数量,没有检查通道和高级功能 |
| ADC/DAC 的精度、速度和通道是否够? | 电位器、传感器、电流采样和模拟输出 | 只看位数,忽略参考电压、采样时间和模拟前端 |
| Flash 需要多少? | 协议栈、文件系统、字库、升级固件和参数 | 忽略升级分区、对齐、扇区和功能增长 |
| SRAM 需要多少? | 任务栈、堆、帧缓存、通信和音频缓冲区 | 忽略堆栈峰值、DMA 可访问性和并发任务 |
| 是否有硬实时要求? | 电机控制、保护停机和精确定时采样 | 只看平均速度,不看最坏执行时间和中断延迟 |
| 功耗目标是什么? | 纽扣电池节点、便携设备和间歇唤醒 | 只看运行功耗,不看休眠、唤醒和外围器件 |
| 封装和生产能力是否匹配? | 手工样机、贴片量产、BGA 检测和返修 | 样机能焊不代表量产、返修和检测成本可接受 |
| 供货和生命周期是否满足? | 长生命周期工业品、第二来源和年度用量 | 只看当天单价,没有第二来源和停产风险评估 |
7.4 怎样看 STM32 产品线
STM32 产品线更新很快,初学阶段先记住下面几个方向,不用把所有系列名称背下来:
| 方向 | 代表系列 | 关注重点 |
|---|---|---|
| 入门与主流 | C0、C5、F0、F1、F3、G0、G4 | 成本、模拟功能、控制外设、安全和主流连接能力 |
| 高性能 | F2、F4、F7、H5、H7 | 主频、缓存、存储、图形、网络和高性能控制 |
| 超低功耗 | L0、L1、L4、L5、U0、U3、U5 | 睡眠电流、唤醒、能效和安全 |
| 无线 | WB0、WB、WBA、WL | 蓝牙、802.15.4、Sub-GHz、协议栈和认证 |
| 专用计算 | N6 等 | 图像、AI 加速、外部存储和高带宽接口 |
真到项目选型时,还是要打开 ST 官方 MCU Portfolio 和产品选择器,从现在能买到的型号里重新筛。某个系列在旧教程里经常出现,只能说明它当年很常用,不能说明它今天仍然最适合你的项目。
7.5 初学者和常见项目怎样选择
这张表先帮大家缩小范围,别拿它直接代替项目需求和器件手册。
| 学习或项目目标 | 可以优先关注的方向 | 需要重点核对 |
|---|---|---|
| 快速学习 GPIO、串口、定时器 | STM32F1、G0,或资料成熟的同级 MCU | 工具链、例程、封装和基础外设 |
| 系统学习 STM32,并覆盖较多复杂外设 | STM32F4 | CAN、USB、SDIO、以太网、DMA 和存储资源 |
| 低成本量产小产品 | STM32C0、G0,或成熟的国产入门 MCU | 单价、封装、引脚复用、量产工具和供货 |
| 电机控制、数字电源 | STM32G4、F3,或专用控制类国产 MCU | 高级定时器、ADC 触发、比较器、运放和保护 |
| 电池供电设备 | STM32U0、U3、U5、L4,或低功耗国产 MCU | 休眠电流、唤醒时间、RTC、RAM 保持和外围功耗 |
| CAN、以太网、SD 卡和复杂通信 | STM32F4、F7、H5、H7,或同类连接型 MCU | RAM、总线带宽、PHY、协议栈和 DMA |
| 小屏显示和简单 GUI | F407/F429 可作为起点 | F407 重点看 FSMC 和外部控制器,F429 可进一步评估 LTDC |
| 大屏 GUI、图像和复杂算法 | STM32F7、H7、N6 等更高性能平台 | Cache、外部 SDRAM、图形加速和存储带宽 |
| 蓝牙、802.15.4 或 Sub-GHz | STM32WB、WBA、WL,或对应无线 SoC | 协议栈、射频认证、天线和低功耗 |
| 高速采样和复杂控制算法 | STM32G4、F4、H7,或实时控制 MCU | ADC 性能、DMA、FPU/DSP、实时性和模拟前端 |
同一个项目往往存在多条可行路线。例如,小屏 GUI 可以使用 F407 配合外部 SRAM,也可以选择集成 LTDC、容量更大的器件。真正决定方案的不是表格中的系列名,而是分辨率、色深、帧率、界面复杂度、成本和开发周期。
7.6 初学者选芯片的建议
- 第一块板优先选择资料成熟的平台:冷门芯片并不一定差,但资料、例程和调试经验不足会放大学习难度。
- 不要一开始就追求最小封装:引脚太少时,复用冲突、测试点不足和调试困难会掩盖真正要学习的内容。
- 学习阶段允许资源宽裕:先把 GPIO、定时器、通信、ADC、中断和 DMA 等共性能力学扎实。
- 产品阶段再做降本和低功耗优化:以实测 Flash、SRAM、CPU、功耗和外设占用为依据裁剪,而不是凭感觉更换型号。
- 优先考虑完整工具链:设备包、SDK、调试器、下载算法、量产工具和勘误资料都会直接影响开发效率。
- 关键外设必须做最小样机验证:特别是 USB、以太网、CAN、SDIO、高速 ADC、电机 PWM 和低功耗唤醒。
7.7 为什么国产 MCU 不能只看型号相似
现在的国产 MCU 已经覆盖通用控制、高性能、低功耗、无线和电机控制等很多方向。选型时就按功能、实测结果、工具链和供应链说话,不要先入为主地把我们优秀的国产厂家当成 低配替代品 ,也不要看到型号相似就默认完全兼容。
谈 兼容 和 替代 之前,先把下面四件事分开:
- 引脚兼容:封装和关键引脚能够直接或经过少量硬件调整替换。
- 外设相似:GPIO、UART、SPI、I2C、ADC、TIM 等概念接近。
- 软件可移植:上层业务逻辑可以复用,底层驱动和启动代码需要适配。
- 生态可替代:工具链、SDK、下载器、Pack、例程、量产工具和技术支持满足项目要求。
即使型号都写成 F407VET6,也不能据此推导电源脚、启动脚、Flash 扇区、DMA 映射、寄存器和系统 Bootloader 完全一致。
7.8 常见国产 MCU 厂商和产品方向
国产 MCU 厂商很多,这里挑几家和通用控制、F4 级迁移或产品选型关系比较近的来介绍。我不在这里给厂商排座次,也不会因为型号长得像就直接下“可以替换 STM32F407”的结论。
| 厂商 | 代表产品方向 | 适合建立的认知 | 迁移时首先检查 |
|---|---|---|---|
| 兆易创新 GigaDevice | GD32F4 及其他 Arm、RISC-V MCU 系列 | 产品线丰富,GD32F4 可用于理解同级 Arm MCU 的迁移 | 电源与启动、Flash、时钟、DMA、USB/CAN 和固件库 |
| 小华半导体 XHSC | HC32F460、HC32F4A0 等工业和高性能 MCU | 高性能控制、模拟和通信资源丰富 | 必须使用 HC32 官方手册、DDL/SDK 和下载工具核对 |
| 雅特力 Artery | AT32F403A、AT32F407 等 Cortex-M4F MCU | 型号命名接近不代表寄存器和库完全相同 | 时钟、存储器、外设映射、BSP 和器件勘误 |
| 极海 Geehy | APM32F407、APM32F425/427 等工业级 MCU | 覆盖通用、高性能和电机控制等应用 | 具体订购型号、SDK、Flash、调试和量产支持 |
| 灵动微 MindMotion | MM32F/G/H/L 及电机控制产品 | 同一厂商也可能同时采用不同内核和产品架构 | 内核架构、启动文件、SDK、调试器和外设模型 |
| 沁恒 WCH | CH32V/X/L/M 等 RISC-V MCU | RISC-V 路线不能当作 Arm 二进制兼容替代 | 指令集、编译器、调试器、SDK 和上层代码可移植性 |
| 航顺 HK32 | 通用、高性能、低功耗、电机和车规 MCU | 产品方向覆盖面较广,具体兼容性必须落到完整型号 | 官方数据手册、引脚、电源、工具链和供货状态 |
| 武汉芯源 CW32 | CW32F 通用、CW32L 低功耗、CW32W 无线 MCU | 可用于低成本、低功耗和无线方向评估 | 资源上限、开发工具、生态、量产流程和长期供货 |
NOTE
表里的产品线会继续更新。选定候选芯片后,直接到厂家官网下载这颗芯片的数据手册、参考手册、勘误和 SDK,经销商参数页和旧工程里的头文件都只能当线索,不能当最终依据。
7.9 什么时候优先 STM32,什么时候评估国产 MCU
| 项目条件 | 更合理的方向 | 原因 |
|---|---|---|
| 第一次学习 Cortex-M | 优先使用 STM32F1/F4 等资料成熟的平台 | 课程、文档、例程和调试经验更丰富 |
| 项目周期短,团队已有 STM32 代码库 | 优先延续 STM32,或选择已完成验证的兼容方案 | 降低重新验证底层平台的时间风险 |
| 强依赖特定 STM32 中间件、认证或长期供货承诺 | 先核对 ST 对应型号 | 迁移成本可能高于芯片差价 |
| 成本压力大且批量较大 | 系统评估国产 MCU | 芯片、交付、本地支持和定制可能更有优势 |
| 供应链需要多来源 | 同时设计和验证 STM32 与国产候选方案 | 降低单一来源和突发缺货风险 |
| 项目明确要求国产化 | 从满足认证、性能和供应链要求的国产型号中选型 | 这是系统约束,不是简单替换一个料号 |
| 需要 RISC-V 或特定国产生态 | 评估 CH32V 等 RISC-V MCU 或其他国产平台 | 架构不同,应按新平台规划工具和软件 |
| 团队拥有目标厂商经验和量产工具 | 可以直接以国产 MCU 为主方案 | 平台熟悉度能显著降低开发与量产风险 |
算成本时别只盯着 MCU 单价。外围器件、PCB 层数、软件开发、认证、调试、量产测试、售后维护和供应链,最后都会落到产品成本里。
7.10 替换 MCU 要分三层检查
7.10.1 硬件层
- 封装尺寸、焊盘和引脚编号。
- VDD、VDDA、VSS、VSSA、VBAT、VCAP 等电源引脚。
- BOOT、复位、晶振和调试接口。
- USB、CAN、SDIO、以太网等关键复用引脚。
- 5 V 容忍、ADC 输入范围、驱动能力和上电默认状态。
- 外部电容、上拉、下拉和未贴器件要求。
我们做天空星核心板时,采用的是 【固定核心板引脚定义、适配不同主控 】的思路,再通过兼容阻容和默认不贴器件处理 STM32、GD32、HC32 等版本之间的差异。这样做是为了在 PCB 阶段给第二来源留出空间,并不是说这些芯片天生就能直接互换。每个版本都要对照 天空星核心板说明、原理图和芯片手册重新检查;这套教程目前仍以 STM32 版本为主,国产芯片版本也没有适配计划。
7.10.2 芯片与软件层
- 启动文件、中断向量和系统时钟初始化。
- 寄存器地址、位定义和复位值。
- HAL、LL、标准库或厂家 SDK 接口。
- DMA 控制器、通道、请求和触发映射。
- Flash 擦写粒度、等待周期和保护机制。
- USB、CAN、ADC、定时器等外设的边界差异。
7.10.3 工具与量产层
- 编译器、IDE、设备包和调试脚本。
- ST-Link、J-Link、CMSIS-DAP 或厂家下载器支持。
- 量产烧录速度、校验、序列号和配置区写入。
- 固件加密、读保护和失效恢复流程。
- SDK 维护质量、勘误、技术支持和供货稳定性。
代码分层清楚时,更换 MCU 通常主要影响芯片层和部分驱动层:
应用层:业务逻辑、状态机、协议解析
驱动层:LED、按键、传感器、电机和通信设备
芯片层:启动、时钟、中断、HAL/LL/寄存器和 DMA2
3
如果应用层到处直接访问芯片寄存器,更换平台时的修改范围会迅速扩大。
7.11 替换 MCU 前的检查清单
| 检查项 | 必须确认的问题 |
|---|---|
| 封装 | 引脚数量、封装尺寸、焊盘、散热焊盘和装配工艺是否一致 |
| 电源 | VDD、VDDA、VBAT、VCAP、上电顺序和去耦要求是否一致 |
| 启动 | BOOT 引脚、启动区域、系统 Bootloader 和 ISP 接口是否一致 |
| 调试 | SWD/JTAG 引脚、调试器、下载算法和器件识别是否支持 |
| 晶振 | HSE/LSE 频率范围、负载电容、旁路模式和启动能力是否一致 |
| GPIO | 5 V 容忍、默认状态、驱动能力、速度等级和复用功能是否一致 |
| 外设 | UART、SPI、I2C、CAN、USB、SDIO、以太网等实例和引脚是否满足 |
| DMA | 控制器、通道或请求映射、FIFO、突发和可访问存储区是否不同 |
| Flash | 容量、扇区、擦写粒度、等待周期、保护和掉电行为是否不同 |
| 时钟 | PLL、总线频率上限、外设时钟源和启动超时策略是否不同 |
| 软件 | 启动文件、CMSIS、SDK、HAL、RTOS 端口和中间件是否需要替换 |
| 量产 | 烧录、校验、序列号、配置区、保护、追溯和失败恢复是否可控 |
实际做替换评审时,我们一般会要求把每一项差异写进对照表,附上手册页码、原理图网络名、测试方法和结论。只证明 封装能焊上去 ,离可量产还差得很远。
八 用筑基学习板的需求反推为什么选择 F407
8.1 从板载资源反推 MCU 需求
回到天空星核心板和筑基学习板,我们选择 STM32F407 不是为了在参数表上显得漂亮,而是希望大家从点灯一路学到通信、存储、电机和网络时,不用中途更换学习平台。
| 筑基学习板上的学习需求 | 对 MCU 的要求 | STM32F407 的对应能力 | 仍需注意 |
|---|---|---|---|
| 屏幕、触摸、SPI Flash、IMU | 多路 SPI/I2C、较高传输速率、DMA | 3 个 SPI、3 个 I2C、DMA1/2 | 片选、复用引脚、总线负载和 DMA 映射 |
| CAN、RS485、以太网 | CAN、USART、Ethernet MAC 和足够缓冲区 | 2 个 bxCAN、6 路 USART/UART、10/100M Ethernet MAC | 仍需 CAN/RS485 收发器、以太网 PHY 和保护电路,筑基学习底板就集成了这些 |
| 电机、舵机、编码器、PWM | 多个通用/高级定时器、PWM 和编码器接口 | TIM1~TIM14,包含高级、通用和基本定时器 | 通道、互补输出、死区、引脚映射和定时器时钟 |
| ADC、电位器和电流电压监测 | 多通道 ADC、DMA、I2C/SPI 监测器件接口 | 3 个 12 位 ADC、DMA、多路 I2C/SPI | 模拟前端、参考电压、采样时间和校准 |
| 音频、TF 卡和文件系统 | I2S、SDIO/SPI、较大 Flash/SRAM | 2 个 I2S、SDIO、512 KB/1 MB Flash、192 KB 主 SRAM | 连续数据带宽、DMA 缓冲区和存储介质时序 |
| USB 实验 | USB OTG FS/HS 控制器、精确 48 MHz 时钟 | USB OTG FS 和 OTG HS 控制器 | 真正 HS 需要外部 ULPI PHY,还要处理 VBUS、ESD 和时钟,筑基学习底板是没有USB相关的,大家直接用核心板上的哪个TYPE-C口即可 |
| 摄像头和并行数据实验 | DCMI、DMA 和较高存储带宽 | 片上 DCMI 和 DMA2 | F407 片内 RAM 有限,分辨率和帧缓存要做预算 |
| 大量 GPIO 与功能复用 | 较多引脚、丰富 AF 和可管理的冲突 | LQFP100、82 个可用 I/O、多种复用功能 | 板载外设会占用引脚,需要拨码开关和资源分配表管理 |
8.2 学习板选型与产品选型的边界
F407 在筑基学习板上的价值是让后续 GPIO、串口、定时器、ADC、DMA、CAN、USB、网络、文件系统和电机控制都能在同一平台找到实践落点。对于学习平台,这种资源冗余可以减少频繁更换主控带来的认知负担。
但产品选型不能照搬这个结论:
- 只需要两路按键、一路继电器和一个串口的产品,通常没有必要使用 F407。
- 电池供电并长期休眠的产品,应优先评估低功耗 MCU 和整机静态电流。
- 大屏 GUI 或图像处理产品,可能需要更大的片内 RAM、外部 SDRAM、Cache 或图形加速。
- 需要 CAN FD、现代安全功能或无线连接时,应选择原生具备对应能力的平台。
学习 F407 的目标不是以后所有项目都使用 F407,而是借助它建立一套可以迁移到其他 MCU 的外设、时钟、存储、调试和选型方法。
九 怎样阅读 STM32F407 官方资料
9.1 四类核心资料各自解决什么问题
| 资料类型 | STM32F407 对应资料 | 主要解决的问题 |
|---|---|---|
| Datasheet | DS8626 | 芯片有什么、封装与引脚、电气参数、工作条件和订购信息 |
| Reference Manual | RM0090 | 外设如何工作、寄存器如何配置、时钟和存储器映射 |
| Programming Manual | PM0214 | Cortex-M4 编程模型、指令、异常、中断和内核外设 |
| Errata Sheet | ES0182 | 芯片已知问题、触发条件、影响和规避方法 |
这几份资料各管一摊,查问题时别拿错了:
例如:
- 想确认
PA5是否支持某个复用功能,应查 Datasheet 的引脚表和复用表。 - 想配置 SPI 寄存器,应查 RM0090 的 SPI 章节。
- 想理解
PendSV、SysTick或异常优先级,应查 PM0214。 - 遇到只在特定条件下出现的外设异常,应查 ES0182。
9.2 Datasheet 应该怎样读
初学阶段不需要从第一页读到最后一页。建议按问题查找:
Features:快速了解能力边界。Device summary:确认数据手册覆盖自己的完整型号。Features and peripheral counts:确认具体型号和封装拥有的资源。Pinouts and pin description:查引脚、电源脚和 5 V 容忍。Alternate function mapping:查复用功能。Memory mapping:查主要地址范围。Electrical characteristics:查电压、电流、时钟、温度和时序。Package information:查尺寸、焊盘和热参数。Ordering information:拆解完整型号。
WARNING
Absolute maximum ratings 是器件不应超过的损坏边界,不是推荐长期工作条件。产品设计应以 Operating conditions 和具体电气特性表为依据,并保留工程余量。
9.3 Reference Manual 应该怎样读
RM0090 主要回答“模块怎样工作、寄存器怎样配置”。学习某个外设时,可以按以下顺序:
- 阅读功能概述和框图。
- 确认外设时钟与复位。
- 理解数据路径和状态机。
- 阅读配置步骤。
- 查看中断和 DMA 请求。
- 最后查寄存器位域、复位值和访问属性。
不要从寄存器表第一行开始死记。先理解外设工作模型,再看寄存器,配置位才有上下文。
9.4 为什么工程师必须看 Errata
勘误表(Errata Sheet)记录芯片已知限制。它能回答:
- 某个异常是否是已知硅问题。
- 哪些芯片修订版本受影响。
- 在什么条件下触发。
- 是否有软件或硬件规避方法。
当问题具有以下特征时,应尽早查勘误:
- 代码和波形看起来都正确,但外设偶发失效。
- 只在高负载、低功耗切换或特定时序下出现。
- 更换芯片批次或修订版本后现象变化。
- 某种操作顺序可以稳定复现异常。
查到勘误后也不能只看标题,必须确认自己的芯片修订版本、触发条件和规避方案是否一致。
9.5 常用应用笔记
| 文档 | 主题 | 适合什么时候看 |
|---|---|---|
| AN4488 | STM32F4 硬件开发入门 | 设计电源、复位、时钟和最小系统 |
| AN2606 | STM32 系统存储器启动模式 | 使用片内 ROM Bootloader |
| AN4031 | STM32F2/F4/F7 DMA 控制器 | 学习 DMA 映射、仲裁和数据流 |
| AN4776 | STM32 通用定时器 Cookbook | 学习定时、PWM、捕获和复杂定时器应用 |
| AN2834 | 提高 STM32 ADC 精度 | 设计模拟前端、参考电压和采样策略 |
应用笔记通常比参考手册更贴近某个专题,但具体寄存器和电气边界仍要回到当前芯片的数据手册与参考手册核对。
9.6 建议建立自己的官方资料包
我习惯给每颗常用主控单独建一个资料目录,省得遇到问题时反复搜索,也能避免把不同版本的手册混在一起。STM32F407 可以这样整理:
STM32F407VET6官方资料包/
├── 00_资料说明.md
├── 01_DS8626_STM32F405_407_Datasheet.pdf
├── 02_RM0090_STM32F405_407_Reference_Manual.pdf
├── 03_ES0182_STM32F405_407_Errata_Sheet.pdf
├── 04_PM0214_STM32_Cortex_M4_Programming_Manual.pdf
├── 05_AN4488_STM32F4_Hardware_Getting_Started.pdf
├── 06_AN2606_STM32_System_Memory_Boot_Mode.pdf
├── 07_AN4776_STM32_Timer_Cookbook.pdf
├── 08_AN4031_STM32F2_F4_F7_DMA_Controller.pdf
├── 09_AN2834_STM32_ADC_Accuracy.pdf
├── 10_UM1718_STM32CubeMX_User_Manual.pdf
└── 11_UM2609_STM32CubeIDE_User_Guide.pdf2
3
4
5
6
7
8
9
10
11
12
13
上面目录中的文档编号可以直接打开:DS8626、RM0090、ES0182、PM0214、AN4488、AN2606、AN4776、AN4031、AN2834、UM1718、UM2609。
这些 PDF 建议大家直接从官网下载最新版本,再按上面的目录整理。00_资料说明.md 可以顺手记下:
- 官方下载地址。
- 文档编号和修订版本。
- 下载日期。
- 文件校验值。
- 本项目使用到的章节和关键页码。
- 新版本重新核对后的差异。
工具手册、勘误和应用笔记都会更新。项目归档时保留实际使用版本有利于复现,开始新设计时则应先到官方文档页检查是否有更新。
9.7 带着问题查资料
手册有上千页,没必要每次都从第一页往后翻。先把问题写清楚,再决定该查哪份资料:
- 这颗芯片在 LQFP100 封装下有多少可用 GPIO?
PA9能否复用为USART1_TX?- APB1 为 42 MHz 时,TIM2 的输入时钟是多少?
- 某个 DMA 请求对应哪条 Stream 和 Channel?
- ADC 输入电压允许范围是什么?
- CAN Bootloader 使用哪个实例和哪些引脚?
- 某个 Option Byte 修改会产生什么副作用?
问题越具体,越容易确定应该查 Datasheet、RM0090、PM0214、AN2606 还是 ES0182。
十 自检、常见问题与排查
10.1 学完后如何自检
读完这一章后,可以拿下面这些问题检查一下自己:
- 根据芯片表面丝印写出完整型号。
- 在 DS8626 的订购信息中解释
VET6。 - 说明为什么天空星高配版
VGT6工程可能需要不同的链接脚本。 - 画出“CPU—总线—外设寄存器—引脚动作”的关系。
- 解释为什么 DMA 缓冲区不能放在 CCM RAM。
- 说明 HSE、LSE 和 PLL 分别解决什么问题。
- 区分系统存储器 Bootloader 与用户 Bootloader。
- 解释 带以太网 MAC 为什么不等于可以直接接网线。
- 给一个简单项目列出 GPIO、通信、存储、功耗和封装需求。
- 说出 Datasheet、Reference Manual 和 Errata Sheet 的分工。
- 根据筑基学习板的一项板载功能,反推它需要的 MCU 外设和外部电路。
- 说明学习板选型与量产产品选型为什么可能得出不同结论。
- 区分引脚兼容、外设相似、软件可移植和生态可替代。
- 为一个国产 MCU 候选型号列出硬件、软件和量产三层验证项目。
不用背原文,只要能用自己的话讲清楚,遇到问题也知道去哪里查,这一章就算学到位了。
10.2 为什么工程只显示 128 KB RAM
现象:芯片资料写 192 KB SRAM,但链接脚本或 IDE 只显示 128 KB。
可能原因:
- 192 KB 中有 64 KB CCM RAM。
- 默认链接脚本只声明 SRAM1 和 SRAM2。
- 工具为了避免 DMA 误用,没有自动把 CCM 合并到普通 RAM。
检查与解决:
- 查看链接脚本中的
MEMORY区域。 - 查看链接映射文件确认各段地址。
- 确实需要 CCM 时,为它建立独立内存区和独立段。
- 只把不需要 DMA 的数据放入 CCM。
10.3 为什么芯片没有运行在 168 MHz
现象:延时、串口或定时器计算结果表明 CPU 频率不是 168 MHz。
可能原因:
- 上电后仍使用 16 MHz HSI。
- HSE 或 PLL 没有启动成功。
- PLL 参数或系统时钟源选择错误。
SystemCoreClock没有更新。- AHB/APB 分频和定时器倍频规则理解错误。
检查与解决:
- 查看 RCC 时钟源就绪和系统时钟状态。
- 核对 PLL、Flash 等待周期和电压等级配置。
- 核对 AHB、APB1 和 APB2 分频。
- 使用 MCO 输出或调试器寄存器查看等方式验证时钟。
- 不要只根据一个阻塞延时函数反推主频。
10.4 为什么有以太网外设却不能直接接网线
现象:数据手册写有 10/100 Mbit/s Ethernet MAC,但开发板没有完整网口时无法通信。
原因:MAC 只负责以太网数据链路层的一部分功能。实际连接双绞线还需要外部 PHY、参考时钟、磁性器件、网口和保护电路。
检查与解决:
- 确认板卡是否布置以太网 PHY。
- 确认使用 MII 还是 RMII。
- 核对参考时钟和引脚复用。
- 核对 PHY 地址、复位、电源和 MDIO/MDC。
- 最后检查驱动、描述符、DMA 和协议栈。
10.5 为什么同为 LQFP100 仍不能直接替换
现象:两颗 MCU 都是 LQFP100,型号也相似,但替换后无法启动或部分外设异常。
可能原因:
- 电源、VCAP、BOOT、复位或晶振脚不同。
- 复用功能和板上关键外设引脚不一致。
- Flash、时钟、DMA 和中断映射不同。
- SDK、启动文件和下载算法没有替换。
- 外设电气特性或上电默认状态不同。
检查与解决:
- 逐引脚比较两份官方 Datasheet。
- 比较最小系统和推荐硬件设计。
- 使用新芯片官方启动文件、SDK 和下载算法。
- 分模块验证时钟、GPIO、串口和关键外设。
- 完成后再评估量产烧录、保护和校验流程。
10.6 为什么 5 V 容忍仍然要看具体引脚
现象:看到 STM32F407 有大量 5 V 容忍 I/O,就认为所有引脚都可以直接输入 5 V。
原因:5 V 容忍与具体引脚类型、工作模式、内部上下拉和供电状态有关。模拟功能、非 FT 引脚和不满足手册条件的情况不能按 5 V 输入设计。
检查与解决:
- 在 DS8626 引脚表中确认目标引脚标记。
- 查 I/O 电气特性和脚注条件。
- 检查该引脚是否进入 ADC 或其他模拟模式。
- 必要时增加分压、电平转换、串联限流或保护器件。
- 详细内容参见 【8】认识GPIO。
十一 本章总结
到这里,我们已经把 STM32F407VET6 从型号、存储器、总线一直拆到了时钟、启动和选型。最后把最关键的结论再收一下:
STM32F407VET6中的V、E、T、6分别对应 100 引脚、512 KB Flash、LQFP 封装和工业温度等级。- STM32F407 使用 Cortex-M4 内核,集成单精度 FPU、DSP 指令和 MPU,最高运行频率为 168 MHz。
- 192 KB 主 SRAM 包含 128 KB 普通 SRAM 和 64 KB CCM RAM;DMA 不能访问 CCM。
- AHB、APB1、APB2 连接不同存储器和外设,时钟上限和定时器时钟规则不同。
- HSI、HSE、LSI、LSE 和 PLL 各有用途,最高主频和精确外设时钟都需要正确配置。
- 复位、启动模式、系统存储器 Bootloader、用户 Bootloader、ISP 和 DFU 是不同概念。
- 片上拥有某个控制器不代表硬件功能已经完整,USB HS、以太网、CAN 等仍依赖外部电路。
- MCU 选型应从需求和风险出发,而不是寻找参数最大的型号。
- STM32 系列和国产 MCU 都应按项目需求、团队能力、生态、供货和量产风险综合比较。
- 更换国产或其他 MCU 时,必须分别检查硬件、芯片软件和工具量产三层兼容性。
- 天空星选择 F407 是为了覆盖更多教学外设,不代表简单量产产品也应该照搬该型号。
- Datasheet、Reference Manual、Programming Manual 和 Errata Sheet 各有分工,工程能力的重要组成部分就是知道去哪里查证。
下一步学习具体 GPIO、定时器、串口和其他外设时,我们会不断回到本章的这条主线:
需求 → 外设 → 引脚与电气 → 时钟与总线 → 寄存器或驱动 → 验证与排错后续学习 【8】认识GPIO 和 【9】新建点灯工程【寄存器版本】 时,可以用这条主线理解“C 代码为什么最终能够改变引脚电平”。
十二 参考资料
- STMicroelectronics:STM32F407VE 产品页
- DS8626:STM32F405xx/STM32F407xx Datasheet
- RM0090:STM32F405/407/415/417/427/437/429/439 Reference Manual
- PM0214:STM32 Cortex-M4 Programming Manual
- ES0182:STM32F405/407xx 和 STM32F415/417xx 勘误表
- AN2606:STM32 系统存储器启动模式
- AN4488:STM32F4 硬件开发入门
- AN4031:STM32F2/F4/F7 DMA 控制器
- AN4776:STM32 通用定时器 Cookbook
- AN2834:提高 STM32 ADC 精度
- UM1718:STM32CubeMX User Manual
- UM2609:STM32CubeIDE User Guide
- STMicroelectronics:STM32 32 位 Arm Cortex MCU 产品组合
- Arm:Cortex-M4 产品与架构特性
- STMicroelectronics:STM32F407/417 官方文档中心
- 兆易创新:GD32F4 官方资料
- 小华半导体:HC32F4A0 产品页
- 雅特力:AT32F407 产品页
- 极海:APM32 工业级 MCU 产品页
- 灵动微:MM32 高性能 MCU 产品页
- 沁恒:RISC-V MCU 产品总览
- 航顺:HK32 MCU 官方网站
- 武汉芯源:CW32 官方网站
- 立创开发板:天空星核心板
- 立创开发板:天空星筑基学习板