STM32

1.系统架构

STM32F4系列的系统架构如图所示(来自User Manual):

image-20250218201302609

可以看到内核通过3条总线连接到AHB(Advanced High-performance Bus)总线矩阵,然后与各个外设、Flash和SRAM连接

Data Sheet里面也有个比较好的架构图:

image-20250218202458726

内核总线

ARM Cortex-M系列的CPU都包含以下3条总线:

  • I-Bus:指令总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作,访问的存储器对象是Flash
  • D-Bus:数据总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的数据访问操作,访问的存储器对象是Flash
  • S-Bus:系统总线,负责在 0x2000_0000 – 0xDFFF_FFFF 和 0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上,访问对象是SRAM和外设寄存器

不同内核实际上各个总线能访问的地址范围不一样

参考:

  • Cortex-M3权威指南第六章
  • STM32 User Manual

2.内存映射

ARM Cortex-M系列的CPU将所有CPU能访问到的资源(包括Flash、SRAM、外设寄存器、I/O端口)都映射到了同一个大小为4GB的地址空间中,不同的存储器位于不同的一段地址上,且大部分区域实际上都没用到,作为保留区

ARM Cortex-M规定了一个大致的范围,各个芯片原厂又在这个范围中进一步定制存储器的地址范围

image-20250218202534990

STM32中重要存储区域的基地址:

  • Flash模块的主存储器:0x0800_0000(Flash分为多个部分,详细请看User Manual第四章)
  • SRAM:0x2000_0000
  • 外设寄存器:0x4000_0000