STM32是一个32位单片机,也就是说,其核心处理器的数据总线宽度为32,这意味着它一次可以处理32位的数据。因此,它可以很方便的访问4GB以内的存储空间(2^32 = 4GB)。
Cortex-M4内核将STM32F407的系统架构中的所有单元,包括 FLASH、SRAM、外设及相关寄存器等全部组织在同一个4GB的线性地址空间内,我们可以通过C语言来访问这些地址空间,从而操作相关外设(读/写)。
存储器本身是没有地址信息的,对存储器分配地址的过程就叫存储器映射。这个分配一般由芯片厂商做好了,ST将所有的存储器及外设资源都映射在一个4GB的地址空间上(8个块),从而可以通过访问对应的地址,访问具体的外设。
STM32F407的存储器映射如下图所示,
如上图所示,ST将4GB空间分成8个块,每个块512MB,从图中我们可以看出有很多保留区域(Reserved),这是因为一般的芯片制造厂家为了方便后续型号升级,会将一些空间预留(Reserved)。8个存储块的功能如下表所示:
存储块 | 功能 | 地址范围 |
---|---|---|
Block 0 | Code | 0X0000 0000 ~ 0x1FFF FFFF(512MB) |
Block 1 | SRAM | 0X2000 0000 ~ 0x3FFF FFFF(512MB) |
Block 2 | 外设 | 0X4000 0000 ~ 0x5FFF FFFF(512MB) |
Block 3 | FSMC Bank1&2 | 0X6000 0000 ~ 0x7FFF FFFF(512MB) |
Block 4 | FSMC Bank3&4 | 0X8000 0000 ~ 0x9FFF FFFF(512MB) |
Block 5 | FSMC 寄存器 | 0XA000 0000 ~ 0xBFFF FFFF(512MB) |
Block 6 | 没用到 | 0XC000 0000 ~ 0xDFFF FFFF(512MB) |
Block 7 | Cortex M4 内部外设 | 0XE000 0000 ~ 0xFFFF FFFF(512MB) |