目录

一、STM32内存基本概念

1. 存储器分类

2. 核心区别

二、STM32H745存储器映射

​编辑

三、工程示例

1. Flash划分(只读)

2. RAM划分(可读写)

3. Keil工程配置截图说明

四、FLASH回读验证


一、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(未写入区域)

  • 目的:验证烧录是否成功,确保程序完整性。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐