STM32(以STM32H745为例)的内存架构

发布时间:2026/7/9 8:27:11
STM32(以STM32H745为例)的内存架构 目录一、STM32内存基本概念1. 存储器分类2. 核心区别二、STM32H745存储器映射​编辑三、工程示例1. Flash划分只读2. RAM划分可读写3. Keil工程配置截图说明四、FLASH回读验证一、STM32内存基本概念1. 存储器分类易失性存储器 → RAM随机存取存储器RAM 是“运行时临时存数据”的地方断电就清空。它又细分为1DRAM动态RAM特点需要周期性刷新电容电荷会泄漏需定期充电速度中等成本低。子类SDRAM同步DRAM、DDR SDRAM双倍数据率、DDRII/DDRIII/DDRIV SDRAM后续迭代速度越来越快。应用电脑内存条、部分嵌入式设备的大容量缓存。2SRAM静态RAM特点不需要刷新靠触发器存储数据速度快、成本高、功耗大。应用嵌入式芯片内部的“高速缓存”比如STM32里的SRAM用来存栈、全局变量、高频访问数据。非易失性存储器 → ROM Flash 其他非易失性存储器是“断电后数据还在”的地方用于存程序、固件、长期数据。它又细分为1ROM只读存储器早期含义现在更广义早期ROM是“只能读不能写”现在ROM类更多指出厂固化、难修改的存储。子类MASK ROM掩膜ROM工厂生产时直接用掩膜工艺写入用户无法修改。PROM可编程ROM用户可一次性写入用电信号烧断熔丝但只能写一次。OTPROM一次性可编程ROM类似PROM只能写一次。EPROM可擦除可编程ROM用紫外线照射擦除可多次编程老式单片机常用。EEPROM电可擦除可编程ROM用电信号擦除可多次编程适合存小容量配置数据如单片机里的参数存储。2Flash闪存特点电可擦除、块级操作按“块”擦除比EEPROM灵活容量更大是目前嵌入式最常用的“程序存储”介质。子类NOR FLASH支持随机读取像RAM一样按字节读适合存“程序代码”因为CPU可以直接执行NOR里的代码→ 图中红框标了NOR FLASH暗示它是STM32等MCU的“程序存储核心”。NAND FLASH块读取、顺序访问容量大、成本低但不支持随机执行需要拷贝到RAM再运行→ 常用于U盘、手机存储、大容量数据区。3其他非易失性存储光盘、软盘、机械硬盘属于外部存储容量大但速度慢用于PC或大型设备的长期数据存储。2. 核心区别Flash断电永存负责“存”RAM断电清空负责“算”。二、STM32H745存储器映射STM32H745是双核M7 M4MCU其存储器映射如下内存类型容量地址范围特性与用途ITCM RAM64 KB0x0000 0000 - 0x0000 FFFFM7指令专用放关键代码中断等Flash2 MB0x0800 0000 - 0x081F FFFF程序存储双核共享存固件、常量DTCM RAM128 KB0x2000 0000 - 0x2001 FFFFM7数据专用高频访问数据AXI SRAM512 KB0x2400 0000 - 0x2407 FFFF高速共享区双核均可访问SRAM1128 KB0x3000 0000 - 0x3001 FFFF通用数据区M4数据存储区SRAM2128 KB0x3002 0000 - 0x3003 FFFF通用数据区M4数据存储区SRAM332 KB0x3004 0000 - 0x3004 7FFF通用数据区以太网等高速外设缓冲区SRAM464 KB0x3800 0000 - 0x3800 FFFF内部共享内存双核数据交互SDRAM32 MB0x7000 0000 - 0x71FF FFFF外部共享内存存大容量结构体✅SRAM起始地址0x2000_0000运行时数据与堆栈✅Flash起始地址0x0800_0000程序固化与启动核心地址三、工程示例1. Flash划分只读区域起始地址容量Boot0x8000000128 KBM70x803FFC01 MBM40x815FFC0640 KB2. RAM划分可读写区域起始地址容量Boot/M70x20000000128 KB0x24000000256 KBM40x30000000128 KB0x24020000384 KB其余地址可通过__attribute__((at(0x30040000)))强制指定存放。3. Keil工程配置截图说明IROM1设置Flash起始地址和大小0x803FFC0, 0x100000IRAM1/IRAM2设置RAM起始地址和大小0x20000000, 0x20000 等这是典型的分散加载脚本Scatter File配置用于精确控制代码和数据在物理内存中的位置。四、FLASH回读验证使用STM32 ST-LINK Utility​ 工具操作读取地址0x0803FFC0长度0x1000001MB对比编译生成的bin文件包含完整程序数据。回读数据与bin文件基本一致仅结尾部分为0xFF未写入区域。目的验证烧录是否成功确保程序完整性。