在STM32微控制器中,IRAM(Internal RAM) 和IROM(Internal ROM)是两种关键的内存区域,分别用于存储运行时数据和程序代码。
1. IRAM(Internal RAM)
定义
- IRAM 是STM32内部的随机存取存储器(RAM) ,用于存储运行时数据(如变量、堆栈、堆等)。
- 属于易失性存储器,断电后数据丢失。
特点
- 用途 :
- 存储全局变量、静态变量、局部变量。
- 函数调用时的栈空间(Stack)。
- 动态内存分配(Heap,如
malloc
分配的内存)。
- 访问速度:极快(与CPU同频,零等待周期)。
- 地址范围 :
- STM32F103C8T6的IRAM地址为
0x20000000
(主RAM)和0x10000000
(CCM RAM,部分型号支持)。
- STM32F103C8T6的IRAM地址为
- 大小 :
- STM32F103C8T6:主RAM 20KB(
0x20000000
~0x20005000
),无CCM RAM。
- STM32F103C8T6:主RAM 20KB(
2. IROM(Internal ROM)
定义
- IROM 是STM32内部的只读存储器(ROM) ,通常指Flash存储器 ,用于存储程序代码(Code)和常量数据。
- 属于非易失性存储器,断电后数据保留。
特点
- 用途 :
- 存储编译后的程序代码(
.text
段)。 - 只读常量(如
const
变量、字符串常量)。 - 中断向量表(位于Flash起始地址)。
- 存储编译后的程序代码(
- 访问速度:较慢(需等待周期,STM32F103 Flash访问需2个等待周期@72MHz)。
- 地址范围 :
- STM32F103C8T6:
0x08000000
~0x0801FFFF
(128KB Flash)。
- STM32F103C8T6:
- 大小 :
- STM32F103C8T6:64KB或128KB(具体型号需查手册)。
3. FLASH中存储的是IRAM还是IROM?
- FLASH存储的是IROM空间,即程序代码和常量数据。
- IRAM(RAM) 是独立于Flash的物理内存,不存储在Flash中。
- 误区澄清 :
- Flash和IROM是同一物理存储器的两种表述:
- 硬件角度:称为Flash(闪存)。
- 软件/链接脚本角度:称为IROM(因为存储只读内容)。
- IRAM(RAM)是另一块独立的内存区域,与Flash无关。
- Flash和IROM是同一物理存储器的两种表述:
4. 关键对比

5. 总结
- IRAM :运行时数据存储(RAM),地址
0x20000000
,速度快但容量小。 - IROM :程序代码存储(Flash),地址
0x08000000
,容量大但访问较慢。 - Flash属于IROM空间,与IRAM无关。
理解这两者的区别,能帮助优化STM32的代码布局和内存管理(例如将关键代码拷贝到RAM执行以提升速度)。
注:本文内容是本人在公司做项目内存使用出现问题时在AI上询问的,也许可以对各位学习内存存储时有一定的帮助,对本文内容请理性查阅使用。