微机原理与接口技术 · 第3章《STM32F1 系列微控制器》知识点全梳理
本文整理自福州大学《微机原理与接口技术》吴衔誉教授第三章课件,系统讲解 STM32F1 系列简介、系统架构与内部结构、存储器映像、时钟结构、引脚与启动配置、最小系统设计六大板块。
目录
- 一、STM32F1 系列微控制器简介
- 二、系统架构与 STM32F103ZET6 内部结构
- 三、STM32F103ZET6 的存储器映像
- 四、STM32F103ZET6 的时钟结构
- 五、引脚与启动配置
- 六、最小系统设计
- 本章小结与思考题
一、STM32F1 系列微控制器简介
1.1 厂商背景
意法半导体(STMicroelectronics,ST)1987 年由意大利 SGS 微电子与法国 Thomson 半导体合并成立,是世界最大的半导体公司之一。
1.2 各系列产品特点
2007 年 6 月,ST 发布首款基于 Cortex-M3、内嵌 32~128 KB 闪存的 STM32 微控制器。F1 系列按应用定位分为:
| 系列 | 主频 | 关键特性 |
|---|---|---|
| 超值型 STM32F100 | 24 MHz | 电机控制、CEC 功能 |
| 基本型 STM32F101 | 36 MHz | 高达 1 MB Flash |
| 连接型 STM32F102 | 48 MHz | 具备 USB FS device 接口 |
| 增强型 STM32F103 | 72 MHz | 高达 1 MB Flash、电机控制、USB、CAN |
| 互联型 STM32F105/107 | 72 MHz | 以太网 MAC、CAN、USB 2.0 OTG |
本课程核心芯片为增强型 STM32F103。
1.3 命名规则(以 STM32F103ZET6 为例)
STM32 F 103 Z E T 6 │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 温度范围:6=工业级 -40~85℃;7=工业级 -40~105℃ │ │ │ │ │ └──── 封装:H=BGA;T=LQFP;U=VFQFPN;Y=WLCSP64 │ │ │ │ └─────── 闪存容量:4=16KB;6=32KB;8=64KB;B=128KB;C=256KB;D=384KB;E=512KB │ │ │ └────────── 引脚数:T=36;C=48;R=64;V=100;Z=144 │ │ └────────────── 子系列:101=基本型;102=USB基本型;103=增强型;105/107=互联型 │ └────────────────── 产品类型:F=通用型 └─────────────────────── STM32:基于 ARM 的 32 位微控制器拆解 STM32F103ZET6:通用型 / 增强型 / 144 脚 / 512 KB Flash / LQFP 封装 / 工业级 -40~85℃。
练习题中的STM32F103RDT6:通用型 / 增强型 / 64 脚 / 384 KB Flash / LQFP / 工业级。
1.4 封装类型
| 封装 | 全称 | 特点 |
|---|---|---|
| LQFP | Low Profile Quad Flat Package | 薄型四方扁平封装,引脚在四边引出 |
| BGA | Ball Grid Array | 球栅阵列,焊球在底部,密度高 |
| VFQFPN | Very thin Fine-pitch Quad Flat No-lead | 超薄无引线四方扁平 |
| WLCSP | Wafer-Level Chip Scale Package | 晶圆级芯片封装,封装后体积 ≈ 裸晶尺寸 |
WLCSP 原理:在整片晶圆上先封装测试再切割,封装后体积等同 IC 裸晶原尺寸,而传统封装会增加约 20% 体积。
二、系统架构与 STM32F103ZET6 内部结构
2.1 系统架构:内核 + 四条总线 + 总线矩阵
ARM Cortex-M3 内核是整个系统的运算控制中心,配备四条专用高速通道:
| 总线 | 连接对象 | 作用 |
|---|---|---|
| ICode | 内核指令总线 ↔ Flash 指令接口 | 指令预取在此完成 |
| DCode | 内核 DCode 总线 ↔ Flash 数据接口 | 取 Flash 中的数据 / 常量 |
| 系统总线 | 内核系统总线 ↔ 总线矩阵 | 访问 SRAM、外设,矩阵协调内核与 DMA |
| DMA 总线 | DMA 的 AHB 主接口 ↔ 总线矩阵 | DMA 与 CPU 经矩阵访问 SRAM/Flash/外设 |
总线矩阵相当于芯片内部的「交通枢纽 / 立交桥」:连接内核各总线、DMA 控制器与存储设备,多主设备(内核、DMA)争用同一从设备时负责仲裁(轮转算法,先来先服务)。矩阵含4 个主动部件 + 4 个被动部件。
AHB/APB 桥:在 AHB 与两条 APB 之间同步连接。APB1 限速 36 MHz,APB2 全速(最高 72 MHz)。
2.2 DMA(直接存储器访问)
DMA 是与 CPU平级的总线主设备,专司数据搬运。
- 本质:CPU 只「下单」,搬运由 DMA 完成;传输前交总线、结束立即交回,不是更快的 CPU,而是另一个总线主设备。
- 一次完整传输 4 步:① DMA 请求(外设数据就绪)→ ② DMA 响应(申请总线控制权)→ ③ DMA 传输(CPU 完全不参与)→ ④ DMA 结束(交回总线并触发中断)。
- 应用举例(ADC 连续采样 1000 点):配置 DMA1 通道 1,源 = ADC1 数据寄存器,目的 = 数组首址,长度 1000、16 位宽。启动后 CPU 转去跑主程序;1000 个数据搬完才触发1 次完成中断——中断次数从 1000 次降到 1 次。
| 对比项 | CPU 亲自搬 | 交给 DMA |
|---|---|---|
| 谁在干活 | CPU 逐字节搬运 | DMA 控制器批量搬运 |
| CPU 状态 | 全程占用,别的都干不了 | 配置后即可并行执行其他任务 |
| 中断开销 | 频繁进出中断、压栈跳转 | 整批完成才中断一次 |
- 单个 DMA 通道内部 5 环节:请求逻辑 → 地址生成(源/目自动递增)→ 宽度控制(8/16/32 位)→ 传输计数(减到 0 结束)→ 优先级仲裁(4 级)。
- 四大优势:解放 CPU、提高吞吐、降低中断频率、适配高速外设。
- STM32F103 特点:DMA1 有 7 通道、DMA2 有 5 通道;外设请求映射固定(使用前查表);支持外设↔内存、内存↔内存三方向;循环缓冲;HT/TC/错误共用 1 个中断。
- 局限:单次上限 65536 个数据单元;通道固定不可随意改接;与 CPU 竞争总线带宽(并非「免费」);源/目宽度须与外设对齐。
- SDIO 与 DMA:SD 卡数据吞吐量大,用 DMA 提速;SDIO 使用DMA2 通道 4。
2.3 FSMC 与 SDIO 辨析
| 名称 | 性质 | 说明 |
|---|---|---|
| Flash | 存储部件 | 非易失,存程序与常量,ZET6 内置 512 KB;读快,写前须擦除 |
| SRAM | 存储部件 | 易失,存变量/堆栈/堆,ZET6 内置 64 KB;读写最快、无需刷新 |
| FSMC | 控制器(接口) | 把外部 SRAM/NOR/NAND Flash 映射进地址空间(仅 xC/xD/xE 高密度型号),可变静态存储控制器 |
| SDIO | 接口 | 按 SD 协议外接 SD 卡,数据量大时常配 DMA2 通道 4 |
一句话:Flash / SRAM 是「放数据的地方」,FSMC / SDIO 是「往外扩的通道」。
2.4 STM32F103ZET6 内部架构(十大组成)
- ARM Cortex-M3 内核:少引脚、低功耗、计算表现好、中断响应快、代码效率高。
- 嵌入式 Flash / SRAM:最多 512 KB Flash、64 KB SRAM(CPU 速度读写)。
- NVIC:43 个可屏蔽中断通道,16 个可编程优先级。
- EXTI(外部中断/事件控制器):19 条边沿探测器,可独立配置/屏蔽;多达 112 个 GPIO 连到 16 个外部中断线。
- 时钟和启动:复位时内部 8 MHz 晶振作 CPU 时钟;可选外部 4~16 MHz 时钟(受监视);Boot 引脚选择启动源。
- Boot 模式:复位时 Boot 引脚在 Flash / 系统存储器 / SRAM 三选项间选择。
- 电源供电:
- VDD(2.0~3.6 V):I/O 与内部调压器主电源;
- VDDA/VSSA(2.0~3.6 V):模拟电压,供 ADC、复位、RC、PLL,须相应接 VSS/VDD;
- VBAT(1.8~3.6 V):VDD 无效时为 RTC、32 kHz 晶振、备份寄存器供电。
- 电源管理:完整上电复位(POR)/ 掉电复位(PDR)电路;嵌入式可编程电压探测器(PVD)监测 VDD,越限产生中断。
- 电压调节:调压器三模式——主模式(MR,运行)、低功耗(LPR,停止模式)、掉电(待机模式,核心断电)。
- 低功耗模式(见下)。
电源符号速记:VCC(电路电压, bipolar 集电极)/ VDD(器件电压,MOS 漏极)/ VSS(公共地)/ VEE(负电源)/ VBAT(备份电池)。
三种低功耗模式:
| 模式 | 工作状态 | 唤醒源 | 断电内容 |
|---|---|---|---|
| 休眠 | 仅 CPU 停,外设全运行 | 任意中断/事件 | 无 |
| 停止 | 1.8 V 区时钟停,PLL/HSI/HSE 禁能 | 外部中断线/PVD/TRC | SRAM 与寄存器保留 |
| 待机 | 调压器关,1.8 V 区断电 | NRST/IWDG/WKUP 上升沿/TRC | SRAM 与寄存器丢失(仅备份+待机电路保留) |
三、STM32F103ZET6 的存储器映像
- 程序、数据、寄存器、I/O 统一编址在4 GB线性地址空间,分成8 个主要块,每块 512 MB(与第 2 章 Cortex-M3 的 4GB 映射一致)。
- 数据字节以小端格式存放(最低地址字节为最低有效字节)。
- 每个外设的相关寄存器地址均可用「首地址 + 偏移量」定位绝对地址(课本表 3-1)。
片上存储:
| 存储 | 容量 | 起始地址 | 访问方式 |
|---|---|---|---|
| SRAM | 64 KB | 0x20000000 | 字节/半字(16)/字(32),且位于位带区 |
| 嵌入式 Flash | 512 KB | 0x08000000 | 主存储块 256×2 KB 页 + 信息块 |
Flash 组织与接口:主存储块容量 64K×64 位,分 256 个 2 KB 页;闪存接口带预取缓冲器(每字 2×64 位),复位后自动打开——因缓冲大小与闪存带宽相同,一次闪存操作即更新整缓冲,使 CPU 可跑更高主频;DCode 上的数据访问优先于取指。
选择字节(Option Bytes)(地址 0x1FFFF800 起):
| 位 | 名称 | 含义 |
|---|---|---|
| 16 | WDG_SW | 0=软件看门狗;1=硬件看门狗 |
| 17 | nRST_STOP | 0=进 STOP 模式产生复位;1=不产生 |
| 18 | nRST_STDBY | 0=进待机产生复位;1=不产生 |
写保护(WRP0~WRP3,共 32 位):bit0~bit30 每 1 位控制 2 个 Flash 页(共 62 页可分 2 页单位单独配);bit31 统一控制其余页;0=保护,1=不保护,默认全 1(全不保护)。Data0/Data1 供用户使用。
四、STM32F103ZET6 的时钟结构
4.1 五个时钟源
| 时钟源 | 类型/频率 | 精度 | 主要用途 |
|---|---|---|---|
| HSI | 高速内部,~8 MHz(内部 RC) | 较低(受温度/电压影响) | 系统时钟备份源;PLL 输入 |
| HSE | 高速外部,4~16 MHz(晶振/时钟) | 高(取决于晶振) | 主时钟源,直接或经 PLL 驱动 SYSCLK;亦可为 RTC 提供时钟 |
| PLL | 锁相环,HSI/HSE 倍频至 72 MHz | 取决于输入 | 提供高性能核心时钟 |
| LSI | 低速内部,~40 kHz(RC) | 低 | 独立看门狗、低功耗唤醒(AWU) |
| LSE | 低速外部,32.768 kHz 晶振 | 高 | RTC 专用,保证日历计时准确 |
汽车比喻:系统时钟如发动机转速(越高性能越强但功耗越大);RTC 如行车电脑时钟/里程表(无论发动机熄火还是运转都默默计时,VBAT 维持则不丢)。
4.2 系统时钟与时钟树
- 系统恢复后默认HSI作系统时钟;时钟源被直接或经 PLL 用作 SYSCLK 时不能被停止;只有目标时钟源就绪后,才可切换。
- PLL 配置:激活前须设好输入源与倍频因子,激活后参数不可改;用 USB 时必须让 PLL 输出 48 或 72 MHz 以供给 48 MHz 的 USBCLK。
- MCO 时钟输出:可输出 SYSCLK、HSI、HSE、PLL/2 到外部引脚(对应 GPIO 须配为复用功能)。
- 分级分频:用户通过预分频器配置 AHB、高速 APB2、低速 APB1 频率;不用时可独立关闭任一时钟源以优化功耗。
4.3 RTC 时钟与三种低速 RTC 时钟源
RTC 时钟由 RCC_BDCR 的RTCSEL[1:0]选择(除非备份域改变,否则不可变):
| 源 | 来源 | 精度 | 供电依赖 | 核心应用 |
|---|---|---|---|---|
| LSE | 外部 32.768 kHz | 高(±20 ppm) | VBAT(备份电池) | 高精度日历、长期计时 |
| LSI | 内部 ~40 kHz RC | 低(±5%) | VDD | 看门狗、低精度临时计时 |
| HSE/128 | 外部高速分频 | 取决于 HSE | VDD | 非低功耗场景 |
供电域比喻:VDD 是主供电(下班即停);VBAT 是备份电池(关键部门独立发电机);备份域是只含 RTC 核心计数器/闹钟/少量备份寄存器的关键区域。LSE 最可靠——它在备份域内,VBAT 维持即可独立于 VDD 运行;LSI 依赖 VDD,断电时状态不能保证;HSE/128 需保持 HSE 运行,功耗高、失去 RTC 低功耗意义。
4.4 派生时钟细节
- SysTick:HCLK 经 AHB 8 分频作外部时钟,或选 Cortex 内核 HCLK。
- 定时器时钟:若所在 APB 预分频系数 = 1,则定时器时钟 = APB 总线频率;否则 = APB 频率 × 2。
- ADC 时钟:APB2 经 2/4/6/8 分频获得。
- FCLK:Cortex-M3 的自由运行时钟。
五、引脚与启动配置
5.1 启动模式(BOOT0 / BOOT1)
系统复位后在 SYSCLK 第 4 个上升沿锁存 Boot 引脚值,三种启动模式:
| BOOT1 | BOOT0 | 启动模式 | 说明 |
|---|---|---|---|
| X | 0 | 主闪存存储器 | 正常模式,运行用户程序(0x08000000 映射到 0x00000000) |
| 0 | 1 | 系统存储器 | 出厂 ISP Bootloader(0x1FFFF000 映射) |
| 1 | 1 | 内置 SRAM | 调试用,掉电不保存,须重映射向量表 |
从主闪存 / 系统存储器启动时,原地址与映射地址均可访问;从 SRAM 启动只能在 0x20000000 访问,且须在初始化时用 NVIC 异常表偏移寄存器把向量表重映射到 SRAM。
退出待机模式时 Boot 引脚值重新锁存,待机期间须保持所需配置。
5.2 三类片内存储器辨析
| 存储器 | 易失性 | 主要用途 | 启动角色 |
|---|---|---|---|
| 主闪存 | 非易失 | 用户程序代码与常量 | BOOT=00 启动区 |
| 系统存储器 | 非易失 | 出厂 ISP Bootloader | BOOT=01 启动区 |
| 内置 SRAM | 易失 | 变量/堆栈/工作区 | BOOT=11 启动区 |
5.3 Flash 与 SRAM 存储原理区别
| 维度 | Flash(浮栅 MOSFET) | SRAM(6 管 CMOS 触发器) |
|---|---|---|
| 原理 | 栅极陷阱电荷表示 0/1 | 双稳态电路锁存 0/1 |
| 写操作 | 须整页/扇区擦除再编程,较慢 | 字节级直接读写,无需擦除 |
| 读速度 | 较快 | 极快(与 CPU 同速) |
| 擦写寿命 | 有限(约 1 万~10 万次) | 无限 |
| 成本/容量 | 单位成本低、容量大 | 单位成本高、容量小 |
六、最小系统设计
STM32F103ZET6 片内已集成电源管理、8 MHz 高速内部 RC、40 kHz 低速内部 RC 等,外部只需7 个无源器件即可工作。常用最小系统模块:
- 复位电路:NRST 引脚内含约 40 kΩ 不可断开上拉;外部再接上拉电阻 + 按键 + 电容,按键按下使 NRST 变 0 实现手动复位。
- 晶体振荡电路:8 MHz 晶振 X1(HSE)+ 32.768 kHz 晶振 X2(LSE),负载电容须贴近引脚以减失真、缩短起振。
- 启动设置电路:BOOT1/BOOT0 各经 10 kΩ 接地 → 从主闪存启动。
- JTAG 接口:4 线(TMS/TCK/TDI/TDO = 模式选择/时钟/数据入/数据出),用于 JLink 下载与在线仿真(IEEE 1149.1)。
- USB 转 TTL(CH340G):从 USB 取 +5 V,实现串口下载,可切换 USB/UART。
- 独立按键电路:外部中断检测 + 待机唤醒。
- AD 采集电路:光敏电阻经开关接到 PA1,由 ADC 采集阻值。
- 流水灯电路 / 电源电路:基本外设与供电。
源与器件:无源器件指电阻、电容等不需电源驱动的元件;有源器件如三极管,需供电才能工作。
本章小结与思考题
核心知识地图:
- STM32F1 简介(ST 背景、五大系列、命名规则、封装);
- 系统架构(4 条总线 + 总线矩阵 + AHB/APB 桥)、DMA(4 步工作流与优势)、FSMC/SDIO 辨析、ZET6 内部十大组成(含电源符号与三种低功耗模式);
- 存储器映像(4 GB/8 块、SRAM 64 KB、Flash 512 KB、预取缓冲、选择字节与写保护);
- 时钟结构(HSI/HSE/LSI/LSE/PLL 五源、系统时钟切换、RTC 三源与 RTCSEL、派生时钟);
- 引脚与启动(BOOT0/BOOT1 三模式、三类存储器辨析、Flash vs SRAM 原理);
- 最小系统(复位/晶振/启动/JTAG/USB 转 TTL/按键/AD/流水灯)。
本文由课程课件与讲稿整理,供学习交流使用。如需转载或用于教学,请注明出处。欢迎在评论区交流讨论。