前言
本文介绍了 STM32 单片机的内部组成以及功能分类,通过阅读本文,您可以了解 STM32 内部各个单元模块之间的工作流程,明晰各模块的核心功能与协作逻辑,为深入理解 STM32 底层运行机制、进行高效的单片机程序开发奠定基础。
STM32 单片机的内部核心架构由内核、总线系统、时钟系统和片上外设 等模块构成,各模块按工作特性与数据交互方式,可划分为被动单元、主动单元、其他单元三类。三类单元各司其职、通过总线矩阵与专用通道实现数据传输和控制信号交互,共同支撑单片机的所有运行功能,以下将对各类单元的组成、功能及核心特性展开详细说明。
|------|------------------------|---------------------------------------|-----------------------------|
| 单元类型 | 特点 | 包含单元 | 作用 |
| 被动单元 | 不能主动发起数据传输,仅被动响应访问 | 内部 SRAM Flash AHB-APB 桥 | 存储数据 / 程序、总线协议转换 + 速度匹配 |
| 主动单元 | 主动发起数据传输 / 控制信号,驱动系统运行 | DCode 总线(D-Bus) 系统总线(S-Bus) DMA1 DMA2 | 读取数据 / 指令、发送控制信号、无 CPU 数据传输 |
| 其他单元 | 专用功能单元,补充核心总线 / 存储能力 | ICode 总线(I-Bus) FSMC | 高速读取指令、扩展外部存储 / 外设 |
STM32内部系统结构图:

一、被动单元
被动单元指无法主动发起数据传输或发送控制信号,仅能被动响应其他单元的访问、读写请求的工作单元,是 STM32 内部的 "数据仓库" 与 "总线转接枢纽",主要包含 3 个核心单元。
1. 内部 SRAM(静态随机存取存储器)
与电脑中常用的 DRAM(动态随机存取存储器)不同,STM32 内部 SRAM 为静态存储,无需刷新电路即可维持数据,读写速度快,与内核同频运行 ,但掉电后数据会完全丢失。其核心功能是存储程序执行过程中产生和使用的各类变量,包括全局变量、局部变量、函数栈数据、临时缓存数据等,是程序运行时的 "临时数据存储空间"。受硬件限制,STM32 内部 SRAM 容量通常较小(如 F103 系列多为几 KB 至几十 KB),是程序开发中需重点关注的内存资源。
2. Flash(内部闪存存储器)
Flash 为非易失性存储器,掉电后数据不会丢失,类比于电脑的硬盘,是 STM32 的 "永久数据存储空间"。其核心功能有二:
- 一是存放编译后的程序二进制代码,单片机上电后,内核会从 Flash 中读取程序指令并执行;
- 二是存储程序执行时用到的全局常量 (如
const关键字定义的数组、常量参数),同时也可存储固件版本、设备参数、离线采集数据等需永久保存的信息。
Flash 的读取速度慢于 SRAM,但存储容量远大于内部 SRAM,是 STM32 程序和固定数据的核心载体。
3. AHB 到 APB 的桥(AHB-APBx 桥)
该单元是 STM32 总线系统的 "转接器",核心实现高级高性能总线(AHB)与高级外设总线(APB)之间的协议转换和速度匹配,分为 APB2 桥和 APB1 桥两个分支,分别连接不同速度的外设总线,适配各类片上外设的工作速率。
- AHB(Advanced High-performance Bus):高级高性能总线,是 STM32 内部的高速骨干总线,连接内核、DMA、Flash 等核心单元,保证高速数据传输;
- APB(Advanced Peripheral Bus) :高级外设总线,专为片上外设设计的低速总线,分为 APB2 和 APB1 两个版本:
- APB2 桥:连接 APB2 总线,适配高速外设(如 GPIO、EXTI、USART1、SPI1、ADC 等),APB2 总线最高工作频率为 72MHz,能满足高速外设的通信需求;
- APB1 桥:连接 APB1 总线,适配低速外设(如 USART2/3、I2C、TIM2~TIM7、RTC 等),APB1 总线最高工作频率为 36MHz,兼顾低速外设的稳定性与功耗。
AHB-APB 桥的存在,让高速的内核总线系统能与不同速率的外设稳定通信,无需 CPU 单独适配各外设的工作速度,是 STM32 总线系统的重要组成部分。
二、主动单元
主动单元也称为驱动单元,指能够主动发起数据传输、发送控制信号,驱动其他单元完成数据交互或功能执行 的工作单元,是 STM32 内部的 "数据快递员" 与 "控制中枢",核心负责启动所有数据交互和指令执行流程,主要包含 4 个核心单元,所有主动单元均通过总线矩阵实现与其他单元的连接,总线矩阵会根据优先级仲裁各主动单元的访问请求,保证数据传输的有序性。
1. Cortex-M3 内核 DCode 总线(D-Bus,数据总线)
D-Bus 是内核专属的数据读取总线,通过外部 DCode 总线连接到总线矩阵,再与闪存存储器的数据接口 相连接,其核心功能是从 Flash 中加载全局常量、读取数据,同时支持调试访问。D-Bus 专为 "数据读取" 设计,与后续介绍的指令总线分工明确,避免数据读取与指令读取抢占总线资源,提升 Flash 的访问效率。
2. 内核系统总线(S-Bus,系统总线)
S-Bus 是内核的核心控制总线,通过外部 System 总线连接到总线矩阵,其核心功能是向其他单元发送控制信号 ,实现内核对整个单片机系统的控制。程序开发中,对各类寄存器的配置(如开启外设时钟、配置 GPIO 工作模式、设置 EXTI 中断触发方式等),均由内核通过 S-Bus 发起写操作;同时,S-Bus 也负责内核对内部 SRAM 的读写访问,是内核控制硬件、操作临时数据的核心通道,优先级最高,优先保证控制指令的快速执行。
3. 通用 DMA1(Direct Memory Access,直接存储器访问)
4. 通用 DMA2(Direct Memory Access,直接存储器访问)
DMA1 和 DMA2 是 STM32 的 "数据传输协处理器",二者均通过 DMA 总线连接到总线矩阵,可主动发起数据传输请求并发送控制信号,核心作用是在无需 CPU 参与的情况下,实现内存(SRAM/Flash)与外设、外设与外设之间的直接数据传输,从而降低 CPU 的负担,节省 CPU 时间。
在传统数据传输中,CPU 需要全程参与 "读取数据 - 发送数据 - 等待完成" 的过程,期间无法执行其他任务;而 DMA 接管数据传输后,CPU 仅需向 DMA 下达传输指令(指定数据源、目标地址、传输长度),DMA 即可自主完成全部传输工作,传输完成后通过中断通知 CPU 即可。DMA1 和 DMA2 的核心区别在于总线挂载与工作速度:DMA1 挂在 APB1 总线,适配低速外设的数据传输;DMA2 挂在 AHB 总线,速度更快,适配高速外设(如 SPI、ADC)的高速数据传输,二者配合可覆盖所有片上外设的无 CPU 数据传输需求。
三、其他单元
其他单元为 STM32 内部的专用功能单元,既不属于纯被动的存储 / 转接单元,也非通用的主动驱动单元,主要用于补充核心总线的访问效率、扩展单片机的硬件功能,是对被动单元和主动单元的重要补充,核心包含 2 个单元。
1. 内核 ICode 总线(I-Bus,指令总线)
ICode 总线是内核专属的指令读取总线 ,与 D-Bus(数据总线)形成明确分工,其核心特殊性在于:不走总线矩阵,通过专用通道直接连接 Flash ,无其他单元的访问竞争,能以最快速度从 Flash 中读取程序指令,保证内核的高效执行。单片机上电后,内核通过 I-Bus 从 Flash 中逐行读取main()函数、中断服务函数、各类自定义函数的二进制指令,并依次执行,是程序运行的 "指令输送通道",其读写速度与内核同频(最高 72MHz),是 STM32 指令执行效率的重要保障。
2. FSMC(Flexible Static Memory Controller,灵活的静态存储器控制器)
FSMC 是 STM32 的外部硬件扩展接口,核心功能是突破单片机内部存储和外设的限制,实现对外部硬件的高速并行连接与控制,主要应用场景包括:
- 扩展外部存储:连接外部 SRAM、Flash、NOR Flash 等,解决内部 SRAM 容量不足、Flash 存储能力有限的问题,可用于存储大量采集数据、字库、图片等大容量数据;
- 驱动显示设备:绝大多数 STM32 开发板的 TFT 液晶显示屏、触摸屏均通过 FSMC 连接,利用其高速并行通信能力,保证屏幕的快速刷新,避免显示卡顿;
- 连接其他并行外设:适配各类支持并行总线的外部硬件,提升单片机的硬件扩展能力。
需注意,FSMC 并非 STM32 所有型号的标配,入门级型号(如 F103C8T6)无此模块,主要存在于中高端型号(如 F103VET6、F103ZET6)中。
四、STM32 内部单元核心协作逻辑
STM32 内部所有单元并非独立工作,而是通过总线矩阵、专用通道、AHB-APB 桥实现高效的互联互通,以 "按键中断控制 LED 亮灭" 的经典场景为例,串联各单元的核心协作流程,明晰程序运行的底层逻辑:
- 程序编译后,二进制代码和全局常量被烧写到Flash中,完成程序存储;
- 单片机上电,内核通过ICode 总线(I-Bus) 从 Flash 中读取
main()函数指令,开始执行程序; - 内核通过系统总线(S-Bus) 发送控制信号,经AHB-APB2 桥配置 GPIO(LED / 按键)、EXTI(中断)的工作模式,开启对应外设时钟,完成硬件初始化;
- 程序运行过程中,
led_flow_on_off(LED 状态变量)、key1_press(按键标志变量)等临时数据被存储在内部 SRAM中,内核通过 S-Bus 对其进行实时读写; - 按键按下时,EXTI 检测到中断信号,经AHB-APB2 桥 、总线矩阵传递到内核,内核暂停主程序执行,通过 I-Bus 读取 Flash 中的中断服务函数指令并执行;
- 中断服务函数中,内核通过 S-Bus 修改 SRAM 中的按键标志变量,完成中断处理;
- 主程序继续执行,内核通过 S-Bus 读取 SRAM 中的 LED 状态变量,再通过AHB-APB2 桥向 GPIO 发送控制信号,实现 LED 的亮灭切换;
- 若程序中用到
const定义的全局常量(如 LED 引脚数组),内核通过DCode 总线(D-Bus) 从 Flash 中读取,避免占用指令总线资源。
整个过程中,被动单元负责存储数据、转接总线,主动单元负责发起指令、传输数据、发送控制信号,其他单元保障指令读取效率、扩展硬件功能,各单元分工明确、协作有序,共同实现单片机的所有功能。
总结
STM32 单片机的内部架构围绕 "内核为核心、总线为纽带、存储为基础、外设为扩展" 设计,按工作特性分为被动、主动、其他三类单元,其核心特点可概括为:
- 被动单元是 "基础":承担存储和总线转接功能,为所有操作提供数据载体和通信通道,掉电易失的 SRAM 负责临时数据,非易失的 Flash 负责永久存储,AHB-APB 桥实现速度匹配;
- 主动单元是 "核心":承担驱动和控制功能,主动发起所有数据传输和指令执行流程,S-Bus/D-Bus 分工实现控制与数据访问,DMA 解放 CPU,提升传输效率;
- 其他单元是 "补充":专用的 ICode 总线保证指令读取速度,FSMC 扩展单片机硬件能力,适配更复杂的应用场景。
理解 STM32 的内部组成与功能分类,是掌握单片机底层运行机制的关键,不仅能帮助开发者在程序开发中合理分配存储资源(如常量放 Flash、变量放 SRAM)、优化硬件配置(如匹配外设总线速度),还能为后续的效率优化(如 DMA 的使用)、硬件扩展(如 FSMC 驱动 LCD)提供理论基础,让程序开发更贴合硬件特性,提升程序的稳定性和效率。