资讯动态

【STM32】 深度详解总线架构 哈佛总线结构

发布时间:2026/9/5 1:46:10 来源:尧图企业网站定制
STM32F1 总线架构 深度详解STM32F1 基于 Cortex-M3 内核采用多层分级总线架构以 AHB 总线矩阵为核心枢纽高速主干 AHB 总线向下通过桥接器分出 APB1、APB2 两条外设总线外设按速度等级分级挂载配合统一编址与时钟门控机制兼顾性能、功耗与编程简洁性。一、整体架构总览┌────────────────────── Cortex-M3 内核 ──────────────────────┐ │ ICode总线 │ DCode总线 │ 系统总线(System) │ 内核侧3条独立总线 └───────┬───────┴────────┬───────┴─────────────┬──────────────┘ │ │ │ ┌───────▼────────────────▼─────────────────────▼──────────────┐ │ AHB 总线矩阵 │ 核心仲裁枢纽 │ 支持多主机并发访问、总线仲裁、访问保护 │ └───┬──────────┬───────────┬─────────────┬───────────────┘ │ │ │ │ Flash SRAM DMA控制器 AHB-APB 桥接器 指令 数据 数据搬运 高速桥 ↓ 低速桥 │ │ APB2总线 APB1总线 最高72MHz 最高36MHz │ │ ┌───┴───┐ ┌─┴──────────┐ │高速外设│ │低速外设 │ │GPIOx │ │USART2/3 │ │USART1 │ │SPI2 │ │SPI1 │ │I2C1/2 │ │ADC │ │TIM2~7 │ │AFIO │ │看门狗/BKP │ └───────┘ └────────────┘架构设计思想分层分级高速模块挂高速总线低速模块挂低速总线避免低速外设拉低整体总线性能同时降低功耗。多总线并行内核侧拆分指令、数据、系统三条独立总线取指、访存、访问外设可以并行进行提升总线带宽。矩阵仲裁多个总线主机内核、DMA可以同时访问不同从机不会互相阻塞。统一编址所有内存、外设共用同一个 32 位地址空间CPU 用相同的指令访问内存和外设。二、内核侧三条独立总线Cortex-M3 内核本身引出三条独立的总线分别负责不同功能都属于 AHB 协议接入 AHB 总线矩阵。总线名称方向核心功能访问对象ICode 总线内核→从机取指令只访问 Flash 程序存储器读取指令码DCode 总线内核↔从机读写常量数据访问 Flash 中的常量、查表数据也可访问 SRAM系统总线(System)内核↔从机通用数据访问访问 SRAM、外设寄存器、片上控制模块设计意义取指和数据访问走不同总线取指不占数据带宽典型的哈佛总线结构思想。比如 CPU 执行指令的同时可以用 DCode 总线读 Flash 里的查表数据系统总线访问外设三条总线并行工作。哈佛总线结构核心思想程序存储器与数据存储器物理分开拥有独立的程序总线、数据总线指令和数据可以并行访问取指令和读写数据可同时进行提高执行效率。对比冯‑诺依曼结构指令、数据共用同一套存储器与总线取指和数据访问只能串行会发生总线冲突冯诺依曼瓶颈。关键特点存储空间分离 程序 ROM、数据 RAM 是两套独立物理存储器地址空间相互独立地址可以重叠。两套独立总线程序总线传输指令、程序常数数据总线传输运算数据 可以同时取指令 读写数据流水线效率高。适合嵌入式 MCU、DSPSTM32、51 单片机就是哈佛结构简单例子CPU 一个时钟周期程序总线从程序存储器取出下一条指令数据总线同时完成运算数的读 / 写冯诺依曼同一时刻只能做其中一件。改进改良哈佛结构现代 MCU 大多使用改良哈佛结构指令、数据存储器物理分离数据总线可访问程序空间支持在程序 ROM 中读取常量查表。对比速记冯‑诺依曼哈佛存储器指令数据共用指令、数据物理分开总线单套总线独立程序、数据总线访问串行取指访存互抢总线并行可同时取指 读写数据代表x86 PC51 单片机、DSP、STM32考点简答版哈佛结构的核心思想是将程序存储器和数据存储器在物理上分开设置独立的程序总线和数据总线实现取指令和访问数据并行操作克服冯诺依曼瓶颈提升运行速度。三、核心枢纽AHB 总线矩阵AHB 总线矩阵是整个系统的交通枢纽负责连接所有总线主机和总线从机完成地址译码、总线仲裁、访问保护。1. 总线主机Master可以主动发起总线读写请求的单元Cortex-M3 内核通过 ICode、DCode、系统总线DMA1 控制器、DMA2 控制器2. 总线从机Slave被动响应读写请求的单元Flash 存储器、SRAM 存储器AHB 外设RCC、FLASH 接口、CRC 等AHB-APB1 桥、AHB-APB2 桥背后是 APB 外设FSMC 静态存储控制器3. 矩阵核心能力并发访问不同主机同时访问不同从机时矩阵可以同时接通互不阻塞。例内核用 ICode 总线取 Flash 指令同时 DMA 搬移 SRAM 里的数据两者完全并行不需要等待。总线仲裁多个主机同时访问同一个从机时按优先级仲裁高优先级先访问低优先级等待。地址译码根据主机发出的地址自动判断访问的是哪个从机选通对应通路。访问保护支持存储器保护单元MPU限制非法地址访问。四、高速主干AHB 系统总线AHBAdvanced High-performance Bus是系统的高速主干总线最高运行频率 72MHzHCLK挂载所有核心高速模块。AHB 总线上的主要模块模块作用基地址内置 Flash存储程序代码、常量数据0x08000000内置 SRAM运行内存、堆栈、变量0x20000000RCC 时钟控制器系统时钟、外设时钟控制0x40021000DMA1 / DMA2直接存储器访问控制器0x40020000/0x40020400FLASH 接口Flash 读写控制、预取缓冲0x40022000CRC 校验单元硬件 CRC 计算0x40023000AHB-APB2 桥AHB 转 APB2 高速外设总线-AHB-APB1 桥AHB 转 APB1 低速外设总线-注意所有 GPIO 端口不在 AHB 总线上而是挂载在 APB2 外设总线上通过 AHB-APB2 桥和 AHB 总线通信。五、外设分支APB1 与 APB2 总线APBAdvanced Peripheral Bus是专门的外设总线通过 AHB-APB 桥从 AHB 总线扩展而来分为高速 APB2 和低速 APB1外设按速度分级挂载。两条 APB 总线核心对比维度APB2 高速外设总线APB1 低速外设总线最高时钟72MHzPCLK2和 AHB 同频不分频36MHzPCLK1AHB 2 分频设计定位高速外设、需要快速响应的外设低速外设、对速度不敏感的外设地址区间0x40010000 ~ 0x4001FFFF0x40000000 ~ 0x4000FFFF核心外设所有 GPIO 端口、USART1、SPI1、ADC1/2、AFIO、EXTIUSART2/3、SPI2、I2C1/2、TIM2~TIM7、看门狗、BKP、PWR为什么 GPIO 挂在 APB2 上GPIO 常常需要高速翻转输出电平、快速读取引脚状态对总线速度要求高APB2 是高速外设总线和 AHB 同频 72MHz能满足 GPIO 高速翻转的性能需求。关于 APB 桥AHB-APB 桥不只是简单的连线核心做三件事协议转换AHB 协议转 APB 协议匹配两种总线的时序、信号定义。时钟分频APB1 桥做 2 分频输出 36MHz 的 PCLK1 给低速外设。总线缓冲隔离高速总线和低速总线避免低速外设拖慢 AHB 总线。六、关键机制地址译码与时钟门控1. 地址译码统一编址的硬件实现CPU 发出一个 32 位地址后总线矩阵里的地址译码器会按地址范围判断目标设备地址落在0x080xxxxx→ 选通 Flash地址落在0x200xxxxx→ 选通 SRAM地址落在0x4001xxxx→ 路由到 APB2 总线APB2 再译码选中具体外设地址落在0x4000xxxx→ 路由到 APB1 总线这就是统一编址的硬件本质不需要专门的 IO 指令CPU 只需要发地址硬件自动根据地址选通对应的从机读写内存和读写外设用完全相同的指令。2. 时钟门控低功耗的核心也是「必须开时钟」的根源什么是时钟门控每个外设的时钟输入都有一个独立的开关门控默认全部关闭软件通过 RCC 寄存器控制开关。时钟关闭时外设内部电路完全不工作寄存器无法读写引脚也不工作。为什么要这么设计STM32 是单片机主打低功耗。绝大多数外设不是每时每刻都在用不用的时候关掉时钟可以大幅降低芯片功耗。和总线的关系时钟是外设工作的动力没有时钟外设电路无法响应总线读写请求。你写GPIOA-ODR 1总线把数据送到 GPIOA 门口但 GPIOA 时钟没开电路不工作数据写不进去引脚也没反应。这就是「操作任何外设之前必须先开启对应总线的外设时钟」的硬件底层原因。对应寄存器APB2 外设时钟RCC_APB2ENR寄存器每一位对应一个外设的时钟开关第 2 位GPIOA 时钟使能第 3 位GPIOB 时钟使能APB1 外设时钟RCC_APB1ENR寄存器七、一次 GPIO 写操作的完整总线流程以执行GPIOA-ODR 0x0001为例从代码到硬件引脚总线层面完整走一遍内核执行指令 CPU 执行 STR 存储指令把数值0x0001写入地址0x4001080CGPIOA_ODR 的地址请求通过系统总线发出。AHB 矩阵路由 地址和数据进入 AHB 总线矩阵地址译码器识别出0x4001080C属于 APB2 外设区间把请求路由到 AHB-APB2 桥。总线桥转换 AHB-APB2 桥完成 AHB 协议到 APB 协议的转换匹配时序和信号把请求发到 APB2 总线上。APB2 外设译码 APB2 总线上的地址译码器进一步译码识别出地址对应 GPIOA 端口选通 GPIOA 外设。寄存器写入 数据写入 GPIOA 的 ODR 输出数据寄存器硬件电路根据 ODR 的值更新输出驱动级的 MOS 管通断。引脚电平变化 输出驱动电路驱动外部物理引脚电平发生变化LED 点亮/熄灭。反过来读 GPIO 输入电平就是逆过程引脚电平→IDR 寄存器→APB2 总线→AHB 桥→系统总线→内核 CPU。高频面试考点STM32F1 有哪几条总线有什么区别内核侧有 ICode、DCode、系统三条总线系统级分为 AHB 高速主干总线、APB2 高速外设总线、APB1 低速外设总线。AHB 最高 72MHz挂载核心模块APB2 最高 72MHz挂载 GPIO、SPI1 等高速外设APB1 最高 36MHz挂载串口、定时器等低速外设。GPIO 挂载在哪条总线上为什么挂载在 APB2 高速外设总线上。GPIO 需要高速翻转电平对总线速度要求高APB2 和 AHB 同频 72MHz能满足性能需求。操作外设之前为什么必须开启时钟不开启会怎么样STM32 每个外设都有独立的时钟门控默认关闭以降低功耗。时钟关闭时外设电路不工作无法响应总线读写寄存器配置不生效引脚无任何反应。AHB 总线矩阵的作用是什么作为总线核心枢纽连接所有总线主机和从机支持多主机并发访问不同从机提升总线带宽负责地址译码、总线仲裁、访问保护。什么是统一编址总线层面怎么实现外设寄存器和内存共用同一个 32 位地址空间CPU 用普通内存读写指令即可访问外设。总线地址译码器根据地址范围自动选通对应的从机内存/外设硬件自动完成地址到设备的映射。APB1 和 APB2 最高频率分别是多少为什么不一样APB2 最高 72MHz和 AHB 同频APB1 最高 36MHz是 AHB 的 2 分频。低速外设不需要高时钟降频可以降低功耗和电磁干扰也降低硬件设计难度

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价