STM32 的“内存划分”

STM32 的"内存划分"要分两层看:

  1. 芯片厂商规定的 地址映射表(4 GB 空间划成 8 大段,每段 512 MB);
  2. 用户程序里的 运行时分区 (代码段、数据段、堆、栈、FreeRTOS 任务栈等)。
    把两张图叠在一起,就能快速定位"我的变量/代码/外设到底落在哪条总线、哪块物理区域"。

一、4 GB 地址映射(ARM Cortex-M 统一规范)

地址范围 官方名字 实际内容(以 F1/F4 为例)
0x0000 0000 -- 0x1FFF FFFF Code 别名区:BOOT 后重映射到 Flash/SRAM/SystemMemory
0x0800 0000 -- 0x080F FFFF 内部 Flash 真正放用户代码、常量、中断向量表
0x1000 0000 -- 0x1FFF FFFF 片上额外 RAM CCM(F4)、ITCM/DTCM(H7)、系统 BootROM、OTP
0x2000 0000 -- 0x3FFF FFFF SRAM 主 SRAM1/2/3、备份 SRAM(电池保持)
0x4000 0000 -- 0x5FFF FFFF 外设寄存器 APB1、APB2、AHB1、AHB2......所有外设寄存器
0x6000 0000 -- 0x9FFF FFFF FSMC/FMC 外部 NOR/NAND/PSRAM/SDRAM
0xA000 0000 -- 0xDFFF FFFF 保留 某些型号接 Quad-SPI、LCD 控制器
0xE000 0000 -- 0xFFFF FFFF 系统级 Cortex-M 内核外设 NVIC、SysTick、MPU、调试器

注:BOOT0/BOOT1 引脚决定 0x0000 0000 这条 512 MB 段到底"影子"到谁身上------Flash、系统 BootROM 还是 SRAM。


二、用户程序运行时"五段"落在上面哪一区

段名 存放内容 存储介质 地址举例
.text 代码、常量、向量表 内部 Flash 0x0800 0000 起
.rodata 只读字符串、const 内部 Flash 紧接代码后
.data 已初始化全局变量 启动时从 Flash 拷贝到 SRAM SRAM 低地址
.bss 未初始化全局/静态 直接清零在 SRAM 接在 .data 后
heap malloc/new 动态区 SRAM _end ~ 栈底
stack 局部变量、中断现场 SRAM 栈顶向下长
FreeRTOS 任务栈 TCB+任务私有栈 在 heap_4 方案下属于 heap 区,即也在 SRAM

栈向低地址"倒长",堆向高地址"长",二者中间剩余空间就是动态内存最大可用值。


三、快速记忆口诀

"4 G 八段 512,

Code 别名可重影;

Flash 代码常量坐,

SRAM 数据堆栈行;

外设寄存 4 开头,

6 9 外存接大屏;

E 段系统不可动,

调试内核藏性命。"


四、开发时最常问的 3 个"在哪"

  1. 全局变量/静态变量

    → 编译后落在 .data/.bss,运行期在 SRAM(0x2000 0000 起)。

  2. malloc / free

    → 堆区,仍在 SRAM,大小由启动文件里的 _heap_size 决定。

  3. 外设寄存器

    → 0x4000 0000 开始,APB1 低速、APB2 高速、AHB 更高速,手册里查偏移即可。

把这张"两层图"印在脑子里,STM32 任何一段代码、变量、寄存器都能秒说出它走在哪条总线、位于哪块物理区域。

相关推荐
可乐鸡翅好好吃2 分钟前
RTC时钟源及其低功耗应用
单片机·嵌入式硬件·实时音视频
senijusene17 分钟前
51单片机:硬件基础、开发工具与核心外设详解
单片机·嵌入式硬件·51单片机
forAllforMe37 分钟前
用STM32+LAN9252的etherCAT 从站实现传感器数据采集
stm32·单片机·嵌入式硬件
G***技39 分钟前
物流自动化迈入边缘智能,杰和科技AR707成为关键引擎
人工智能·嵌入式硬件·机器人·边缘计算盒
雨洛lhw41 分钟前
压控晶振学习笔记
嵌入式硬件·晶振
2501_918126911 小时前
学习所有用c语言定义stm32的语句
c语言·stm32·嵌入式硬件·学习·个人开发
普中科技1 小时前
【普中 51-Ai8051 开发攻略】-- 第 3 章 Ai8051U 介绍
单片机·嵌入式硬件·开发板·普中科技·ai8051u·aicube
隔壁大炮1 小时前
PID控制结构&角度环实现直立
stm32·嵌入式·硬件·pid·平衡车·江协科技
羽获飞1 小时前
从零开始学嵌入式之STM32——29.通用定时器-输入捕获模式测量信号的周期和频率
stm32·单片机·嵌入式硬件
421!2 小时前
ESP32学习笔记之GPIO
开发语言·笔记·单片机·嵌入式硬件·学习·算法·fpga开发