ROM
Read-Only Memory 只读存储器,固化内容,不易更改 存放固定程序或启动信息(如Bootloader)
RAM Random Access Memory 易失性存储器,断电即失 程序运行时的数据区
SRAM
Static RAM 静态 RAM,速度快,成本高 STM32 中的主 RAM 一般是 SRAM
DRAM
Dynamic RAM 动态 RAM,需不断刷新 通常用于 PC,不常见于 STM32
Flash
Flash Memory 非易失性存储器,可擦除写入 存储用户程序和常量数据
STM32 中内存的划分
在 STM32 微控制器中,最常见的内存结构包括:
1. Flash Memory(闪存)
类型:非易失性存储器(断电不丢失)
特点:只能擦除整页(页大小和芯片有关)
作用:
存储用户程序代码(.text)
存储常量(const)
存储配置信息、表格数据等(可使用 Flash 擦写库函数读写)
地址范围示例(STM32F103C8T6):
0x08000000 ~ 0x0801FFFF (128 KB)
2. SRAM(内部 RAM)
类型:易失性静态 RAM(掉电丢失)
作用:
存储程序运行时的数据,如:
全局变量(.data)
堆栈(stack)
动态分配(malloc)
用于中断服务、临时缓冲等
地址范围示例(STM32F103C8T6):
0x20000000 ~ 0x20004FFF (20 KB)
3. ROM(实际上是 Flash 的一部分)
一般指芯片出厂时烧录的系统 Bootloader(IAP)
对用户不可写
可以用于 DFU 模式或串口下载
4. 外部 RAM / 外部 Flash(选配)
通过 FSMC/QSPI 连接的外部扩展存储器=
用于需要大量内存的应用(如图像缓存、音频、FS)
三、编译后代码的内存分区(段)
段名 存储位置 内容
.text Flash 程序代码、 常量
.data RAM (SRAM) 已初始化的全局变量
.bss RAM (SRAM) 未初始化的全局/静态变量
stack RAM 栈空间(局部变量、函数调用)
heap RAM 动态内存(malloc/free)
四、常见问题解答
1️⃣ ROM 和 Flash 有什么区别?
ROM 是概念上的分类:指“只读存储器”。
Flash 是实现方式的一种:一种可擦写的非易失性 ROM,STM32 中用作主 ROM。
2️⃣ SRAM 和 RAM 是一回事吗?
RAM 是统称,包括 SRAM 和 DRAM;
STM32 使用的是 SRAM,比 DRAM 快且不需要刷新。
3️⃣ Flash 可以写吗?
可以,但速度慢、寿命有限(支持数万次擦写)
通常用于存放程序或较少更新的数据,如配置项
4️⃣ 堆区和栈区存在哪里?
都在 RAM(SRAM)中,栈从高地址往下增长,堆从低地址往上增长
五、STM32 存储器结构图
STM32F103C8T6
+-----------------------+ 0x08000000
| Flash 存储器 |
| (程序代码) |
+-----------------------+
| 空间或保留 |
+-----------------------+ 0x20000000
| SRAM(RAM) |
| .data, .bss, heap, stack |
+-----------------------+
| 外设寄存器、系统区域 |
+-----------------------+ 0xE0000000
F405RGT6
0x00000000 --> 起始地址(映射区域,可配置为 Flash 或 SRAM)
0x08000000 --> Flash(1MB)
0x10000000 --> CCM RAM(64KB)
0x20000000 --> SRAM1 + SRAM2(共128KB)
0x40000000 --> 外设寄存器
0x1FFF0000 --> 系统 BootROM(30KB)