STM32存储架构详解

HarderHeng Lv5

一、STM32内核还有MCU

在一块STM32的芯片中,有内核、存储、总线和各种外设。

STM32芯片本身叫做MCU,也可以是一个SOC,上述所有的硬件都被集成在其中。

其中的存储器有flash和sram两部分,下面会详细解释这些。

作为一个stm32的芯片,其内存布局往往是被cortex-M3内核大致确定的,很多STM32都遵循着类似的内存布局。

二、STM32的虚拟内存

STM32将整块芯片中所有可用的地址都统一映射为虚拟内存,32位的寄存器和地址总线允许的寻址空间为4G,这4GB的虚拟内存被ARM内核大致划分,对ST公司来说做了一些更具体和符合使用情况的细节划分。

此处的虚拟内存只是一种映射,stm32中没有虚拟内存的概念,也没有MMU专门管理内存。stm32的映射由MPU(memory protection unit)实现

6a5c979dfab180935017d06e26f7a318

  • Code 代码区,对应着硬件中的Flash,也就是stm32的rom,存放着从PC烧录过来的二进制可执行文件。
  • SRAM 对应着硬件中的片上ram,存放着从Flash拷贝过来的全局变量和静态变量,以及其他的一些执行过程中的使用的变量和栈
  • Peripherals 用于片上外设的虚拟地址。
  • ExternalRAM 用于扩展外部存储器,将外置RAM连接到芯片并进行软件的配置就可以扩展RAM的大小。
  • External Devices 用于扩展片外的外设。
  • System Level 服务于CM3的外设,主要是NVIC和MPU以及调试工具等等。

嵌入式ARM处理器内核都是类哈佛架构,即数据总线和指令总线独立,那么最理想的情况就是程序放在Code区,数据放在SRAM区,以保证良好的性能

位带区和位带别名区

ff9fa8f1f8b33a3e8a48f21a7bf49cff

SRAMPeripherals中存在一个位带区和位带别名区。以Peripherals为例,许多常用外设都放在位带区中,如果要操作某一个寄存器的单独一位,位带区中的每一位都会被单独映射到位带别名区,并且每一位映射为32位。

STM32的内存空间是根据ARM内核划分的具体实现。

STM32的4G内存被分为大小相同的8个block,每个大小就是512mb,可以和ARM内核的空间划分相对应。从低地址到高地址分别是:

  • Block0Code代码区,存储着默认的中断向量表,同时连接着FLASH存储着烧录好的代码。
  • Block1,SRAM区,用于存放代码运行时的一些变量和堆栈。
  • Block2,Peripheral区,用于片上外设的地址,在这里可以修改片上外设的地址来操作外设。
  • Block3,Block4 这里是外置RAM区,用来扩展外部的存储器,包括flash和sram。准确来说是连接到FSMC(灵活静态存储器控制器)上。
  • Block5,FSMC寄存器,FSMC寄存器的地址就从这个块的起始地址开始。
  • Block6,保留地址。按理说Block5和6对应着ARM内核划分的片外外设区,但是对STM32的设计来说应该是把这1GB的内存全部用给了FSMC的寄存器,并没有给片外外设留空间。
  • Block7,内核内部外设。
  • Title: STM32存储架构详解
  • Author: HarderHeng
  • Created at : 2024-05-08 15:54:38
  • Updated at : 2024-11-05 15:27:10
  • Link: https://harderheng.life/2024/05/08/STM32存储架构详解/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments