STM32学习 | 第1章 综述之STM32F103系统架构(江科大STM32学习笔记)
一、Cortex‑M3内核:CPU核心
下图是STM32F1系列架构框图,包含了内核、总线矩阵、存储器、DMA、总线桥接、外设、时钟复位全部模块,理解这张图就能看懂STM32数据是怎么流动的。


左上角 Cortex‑M3,是ARM的32位内核,是整个芯片运算核心。
1. Cortex‑M3 内核的 3 条总线(内核输出)
① ICode(Instruction Code,指令总线)
- 连接:内核 → Flash接口 → Flash,绕过总线矩阵,不经过总线矩阵仲裁。
- 用途:专门从Flash读取程序指令,**用来取程序指令(机器码),CPU 流水线预取指令全部走这条 VIP 专线。
- 设计目的:硬件上把取指通路独立出来,不和数据访问抢总线带宽,取指不会被 DMA / 外设访问阻塞,保证流水线连续运行。
- 限制:不能访问 SRAM、外设寄存器,只能访问 Flash 的指令端口;常量
const数据不走 ICode,走 DCode。
② DCode(Data Code,数据总线)
- 连接:Cortex‑M3 → 接入总线矩阵。
- 用途:用于访问常量、读取/写入数据;访问Flash常量、SRAM变量、调试访问。
- 读取 Flash 里面的
const常量; - SRAM 读写(局部变量、栈);
- 调试访问,调试硬件断点也走DCode。;
- 读取 Flash 里面的
- 特点:AHB 总线,可以读、可以写;会参与总线矩阵的多主设备仲裁,会和 DMA 发生访问冲突。
关键点:M3采用哈佛架构,ICode和DCode是分开的,CPU可以一边取指令(ICode读Flash),一边读写数据(DCode),并行执行,提升效率。
③ System 总线(S‑Bus,系统总线)
- 连接:Cortex‑M3 → 接入总线矩阵。
- 用途:内核访问所有片上外设(GPIO、USART、SPI、TIM 等等)的外设寄存器,经过 AHB‑APB 桥访问 APB 外设,CPU读写GPIO、USART、TIM等外设寄存器,全部走System总线。
区分 DCode 与 System:
- DCode:偏向存储器访问(SRAM、Flash 数据区)
- System:偏向片上外设寄存器访问。
2. DMA 总线(非内核输出,独立主设备)
DMA1/DMA2 本身是独立的总线主设备,它自己输出一条 DMA 总线,接入总线矩阵,和内核的 DCode、System,三者一起竞争总线矩阵的访问权。
- DMA 不需要 CPU 介入,自己作为主机,发起对 SRAM、外设寄存器的读写;
- 总线矩阵会做轮询仲裁:当 CPU (DCode/System) 和 DMA 同时访问同一个从设备(比如 SRAM),轮流分配总线,防止总线死锁。
二、总线矩阵(Bus Matrix)
总线矩阵是整个芯片的交通枢纽,本质是一个多路仲裁器。
- 输入(主设备):Cortex‑M3的2条总线、DMA1、DMA2;这些是发起数据读写的主人。
- 输出(从设备):Flash接口、SRAM、FSMC、SDIO、AHB外设;这些是被访问的对象。
作用:当多个主设备同时要访问同一个从设备(比如CPU和DMA同时读SRAM),总线矩阵做总线仲裁,分配优先级,避免数据冲突。
三、存储器部分
1. Flash + Flash接口
- Flash:片内闪存,存放程序代码、const常量,掉电数据不丢失。
- Flash接口:Flash的控制器,ICode/DCode都经过它访问Flash。CPU跑固件,就是ICode总线通过Flash接口取指令。
2. SRAM
片内静态随机存储器,运行时内存:存放局部变量、全局变量、栈、堆;掉电全部丢失。
CPU通过DCode读写SRAM;DMA也可以读写SRAM,实现内存搬运。
3. FSMC(灵活静态存储控制器)
FSMC接到总线矩阵,是外部存储器控制器,用来外接SRAM、NOR‑Flash、LCD屏幕。STM32驱动8080接口LCD就是用FSMC。
4. SDIO
SD卡控制器,接SD卡、MMC卡,属于AHB高速外设。
四、DMA1、DMA2(直接存储器访问)
左边两个模块DMA1、DMA2。
DMA核心意义:不占用CPU,硬件自动搬运数据,CPU不用介入数据拷贝,解放内核做别的运算。
- DMA请求线:图里的
DMA请求箭头,来自各个外设(ADC、USART、SPI等)。- 例如串口收到1字节,外设发出DMA请求,DMA直接把字节搬到SRAM,不用CPU进中断读取。
- DMA也是总线矩阵的主设备,可以主动发起读写:内存↔外设、内存↔内存搬运。
- DMA1:7个通道;DMA2:5个通道(大容量F1才有DMA2,中容量只有DMA1),不同外设硬件绑定固定DMA通道。
数据流例子:USART接收寄存器 → DMA请求 → DMA控制器 → 总线矩阵 → SRAM,全程CPU不用干预。
五、AHB系统总线 + 复位和时钟控制RCC
- AHB系统总线:先进高性能总线,总线矩阵向下输出到AHB总线。高速外设挂在AHB上:RCC、SDIO。
- RCC(复位和时钟控制),框图中间。整个芯片的心脏。
- 控制各个外设时钟开关,哪个外设要工作,就打开对应时钟;不打开时钟外设完全不工作。
- 系统时钟配置:HSE、HSI、PLL,配置CPU主频。
- 控制外设复位。
- STM32写代码注意不要忘记开启外设时钟,寄存器会读写无效。
六、桥接1、桥接2(AHB‑APB桥)
AHB是高速总线,为先进高性能总线,APB是低速外设总线,为先进外设总线。
AHB和APB协议不一样,需要桥接器做协议转换,相当于“高速主干道转低速辅路”。
- 桥接1 → APB1总线: APB1是低速外设总线,最大时钟36MHz。 APB1外设:TIM2‑TIM7、USART2‑5、SPI2/I2S2、I2C1 I2C2、CAN、RTC、WWDG、PWR。
- 桥接2 → APB2总线: APB2外设,最大72MHz,速度更高。 APB2外设:TIM1、TIM8、USART1、SPI1、ADC1‑3、GPIOA‑G、AFIO、EXTI。
为什么要分APB1/APB2?部分外设最高时钟受限,APB1时钟不能超过36M。
七、APB1 / APB2挂载外设(框图右下角)

APB2外设(高速,72MHz)
- GPIOA/GPIOB/GPIOC…GPIO:通用IO口
- AFIO:复用功能IO控制器,引脚重映射
- EXTI:外部中断控制器
- ADC1/2/3:模数转换器
- TIM1、TIM8:高级定时器
- USART1、SPI1
APB1外设(低速,36MHz)
- TIM2‑TIM7通用定时器
- USART2/3/4/5;SPI2;I2C1 I2C2;bxCAN;RTC;DAC;PWR电源控制;WWDG独立看门狗等。
八、数据流过程
例1:CPU执行代码
- CPU(Cortex‑M3) 通过 ICode总线 →总线矩阵→Flash接口→Flash读取指令。
- 指令如果操作变量:DCode读写SRAM。
- 指令操作GPIO:System总线 →总线矩阵→AHB→桥接2→APB2→GPIO寄存器。
例2:DMA搬运串口接收数据
- USART收到字节,发出
DMA请求信号给到DMA控制器。 - DMA作为总线矩阵主设备,接管总线。
- DMA读USART数据寄存器(APB1→桥接1→AHB→总线矩阵)
- DMA把数据写入SRAM(总线矩阵→SRAM)。
- 写入过程CPU完全不参与。
九、相关问题总结
- Cortex‑M3有哪几条总线?ICode(取指令)、DCode(数据)、System(外设寄存器)、DMA总线。
- 总线矩阵作用:多主设备总线仲裁,管理CPU、DMA访问冲突。
- APB1、APB2区别:最高时钟不同,挂载外设不同。
- DMA怎么工作:外设发DMA请求,DMA作为总线主设备,绕过CPU搬运数据。
- ICode只能读Flash,指令从Flash取;SRAM放运行变量。
- RCC位置:AHB总线,所有外设时钟由RCC控制。
更多推荐



所有评论(0)