STM32(以STM32H745为例)的内存架构
目录
一、STM32内存基本概念

1. 存储器分类
-
易失性存储器 → RAM(随机存取存储器)
RAM 是“运行时临时存数据”的地方,断电就清空。它又细分为:
(1)DRAM(动态RAM)
特点:需要周期性刷新(电容电荷会泄漏,需定期充电),速度中等,成本低。
子类:SDRAM(同步DRAM)、DDR SDRAM(双倍数据率)、DDRII/DDRIII/DDRIV SDRAM(后续迭代,速度越来越快)。
应用:电脑内存条、部分嵌入式设备的大容量缓存。
(2)SRAM(静态RAM)
特点:不需要刷新(靠触发器存储数据),速度快、成本高、功耗大。
应用:嵌入式芯片内部的“高速缓存”(比如STM32里的SRAM,用来存栈、全局变量、高频访问数据)。
-
非易失性存储器 → ROM + Flash + 其他
非易失性存储器是“断电后数据还在”的地方,用于存程序、固件、长期数据。它又细分为:
(1)ROM(只读存储器,早期含义,现在更广义)
早期ROM是“只能读不能写”,现在ROM类更多指出厂固化、难修改的存储。
子类:
MASK ROM:掩膜ROM,工厂生产时直接用掩膜工艺写入,用户无法修改。
PROM(可编程ROM):用户可一次性写入(用电信号烧断熔丝),但只能写一次。
OTPROM(一次性可编程ROM):类似PROM,只能写一次。
EPROM(可擦除可编程ROM):用紫外线照射擦除,可多次编程(老式单片机常用)。
EEPROM(电可擦除可编程ROM):用电信号擦除,可多次编程,适合存小容量配置数据(如单片机里的参数存储)。
(2)Flash(闪存)
特点:电可擦除、块级操作(按“块”擦除,比EEPROM灵活,容量更大),是目前嵌入式最常用的“程序存储”介质。
子类:
NOR FLASH:支持随机读取(像RAM一样按字节读),适合存“程序代码”(因为CPU可以直接执行NOR里的代码)→ 图中红框标了NOR FLASH,暗示它是STM32等MCU的“程序存储核心”。
NAND FLASH:块读取、顺序访问,容量大、成本低,但不支持随机执行(需要拷贝到RAM再运行)→ 常用于U盘、手机存储、大容量数据区。
(3)其他非易失性存储
光盘、软盘、机械硬盘:属于外部存储,容量大但速度慢,用于PC或大型设备的长期数据存储。
2. 核心区别
Flash断电永存负责“存”,RAM断电清空负责“算”。
二、STM32H745存储器映射
STM32H745是双核(M7 + M4)MCU,其存储器映射如下:
|
内存类型 |
容量 |
地址范围 |
特性与用途 |
|---|---|---|---|
|
ITCM RAM |
64 KB |
0x0000 0000 - 0x0000 FFFF |
M7指令专用,放关键代码(中断等) |
|
Flash |
2 MB |
0x0800 0000 - 0x081F FFFF |
程序存储,双核共享,存固件、常量 |
|
DTCM RAM |
128 KB |
0x2000 0000 - 0x2001 FFFF |
M7数据专用,高频访问数据 |
|
AXI SRAM |
512 KB |
0x2400 0000 - 0x2407 FFFF |
高速共享区,双核均可访问 |
|
SRAM1 |
128 KB |
0x3000 0000 - 0x3001 FFFF |
通用数据区,M4数据存储区 |
|
SRAM2 |
128 KB |
0x3002 0000 - 0x3003 FFFF |
通用数据区,M4数据存储区 |
|
SRAM3 |
32 KB |
0x3004 0000 - 0x3004 7FFF |
通用数据区,以太网等高速外设缓冲区 |
|
SRAM4 |
64 KB |
0x3800 0000 - 0x3800 FFFF |
内部共享内存,双核数据交互 |
|
SDRAM |
32 MB |
0x7000 0000 - 0x71FF FFFF |
外部共享内存,存大容量结构体 |
✅ SRAM起始地址:0x2000_0000(运行时数据与堆栈)
✅ Flash起始地址:0x0800_0000(程序固化与启动核心地址)
三、工程示例

1. Flash划分(只读)
|
区域 |
起始地址 |
容量 |
|---|---|---|
|
Boot |
0x8000000 |
128 KB |
|
M7 |
0x803FFC0 |
1 MB |
|
M4 |
0x815FFC0 |
640 KB |
2. RAM划分(可读写)
|
区域 |
起始地址 |
容量 |
|---|---|---|
|
Boot/M7 |
0x20000000 |
128 KB |
|
0x24000000 |
256 KB |
|
| M4 |
0x30000000 |
128 KB |
|
0x24020000 |
384 KB |
💡 其余地址可通过
__attribute__((at(0x30040000)))强制指定存放。
3. Keil工程配置截图说明
-
IROM1:设置Flash起始地址和大小(0x803FFC0, 0x100000)
-
IRAM1/IRAM2:设置RAM起始地址和大小(0x20000000, 0x20000 等)
-
这是典型的 分散加载脚本(Scatter File)配置,用于精确控制代码和数据在物理内存中的位置。
四、FLASH回读验证

使用 STM32 ST-LINK Utility 工具:
-
操作:读取地址
0x0803FFC0,长度0x100000(1MB) -
对比:
-
编译生成的bin文件:包含完整程序数据。
-
回读数据:与bin文件基本一致,仅结尾部分为0xFF(未写入区域)。
-
-
目的:验证烧录是否成功,确保程序完整性。
更多推荐

所有评论(0)