☰
STM32(Cortex‑M4)内存区域、地址映射与读写权限
2026/10/17 2:32:56 网站建设 项目流程

前言

在 Cortex‑M 内核 STM32 汇编开发中,很多初学者会遇到同一个困惑:同样是自定义数据标签,加载到寄存器后地址却分属完全不同的区间。有人疑惑为什么会出现0x08xxxxxx、0x2000xxxx、0x4000xxxx三类地址;也会问到是否存在 “只写内存区域”。

本文从硬件内存分区、汇编段属性、读写权限、使用场景四个维度,完整梳理 STM32 全部地址区域,区分存储内存与外设寄存器,解答只读、可读可写、只写地址的核心差异。

一、核心基础概念

  1. 程序存储内存:分为 Flash、SRAM 两类,用于存放代码、常量、运行变量,由汇编AREA伪指令分配地址;存储内存仅存在只读、可读可写两种属性,不存在纯粹只写的通用内存。
  2. 外设寄存器地址区:不属于存储内存,是硬件外设控制接口,这片区域内包含真正意义上的 “只写地址”。
  3. 地址区间是区分内存区域最直观的标识,链接器根据段属性自动分配对应地址,无需手动指定。

二、三大地址区域完整详解

1. Flash 只读存储区(RO 区)

基础参数
  • 标准地址范围:0x08000000 ~ 0x080FFFFF
  • 汇编段标识:READONLY
    • 代码段:AREA |.text|,CODE,READONLY
    • 常量 / 中断向量段:AREA xxx,DATA,READONLY
读写与存储特性
  • 运行时仅支持读取,程序正常运行过程中无法修改;仅固件下载时可烧录更新。
  • 断电后数据永久保存,不会丢失。
存储内容

中断向量表、程序执行代码、固定常量数组、只读配置参数。

常见疑问:为什么地址不是刚好 0x08000000?

Flash 地址段从0x08000000起始,但该地址固定存放中断向量表。向量表会占用一段连续空间,加上链接器自动的地址对齐填充,后续常量段会向后偏移,地址变为0x080004XX等数值,但本质仍属于 Flash 只读区域。

操作限制

仅能使用LDR/LDMIA读取数据,不可使用STR/STMIA写入。

2. SRAM 可读写运行内存(RW 区)

基础参数
  • 标准地址范围:0x20000000 ~ 0x2001FFFF
  • 汇编段标识:READWRITE
    • 示例定义:AREA BUFFER,DATA,READWRITE
读写与存储特性
  • 程序运行期间可读、可反复写入修改,支持动态更新数据。
  • 断电后所有数据清空,仅上电运行时临时存储数据。
存储内容

数据缓冲区、全局变量、运算临时数据、堆栈空间。

典型数据流转逻辑

程序从 Flash 读取固定常量到寄存器,再批量写入 SRAM 缓冲区,在 SRAM 中完成数据修改、运算。

3. 片内外设寄存器地址区(含只写地址)

基础参数
  • 标准地址范围:0x40000000 ~ 0x5FFFFFFF
  • 无汇编AREA段定义,属于硬件外设专属控制地址,不属于存储内存,不长期保存数据。
寄存器三类读写权限
  1. 可读可写寄存器多用于外设配置,例如 GPIO 模式寄存器、定时器预分频寄存器;可读当前配置、写可修改外设参数。
  2. 只读寄存器仅用于读取硬件实时状态,例如 GPIO 输入数据寄存器、ADC 采样结果寄存器;写入操作无任何效果。
  3. 只写寄存器(业内俗称 “只写区域”)是单片机唯一具备只写特性的地址,典型如引脚置位 / 清零寄存器、中断标志清除寄存器。对该地址执行写操作可触发硬件动作;读操作无法获取有效数据,读取值无实际意义。
使用场景

通过读写该区域地址,完成 GPIO、定时器、ADC、串口等外设的硬件控制。

三、三大区域对比总表

区域分类地址特征汇编段属性读写权限断电数据状态核心用途
Flash 只读存储区0x08 开头READONLY运行只读,不可改写永久保留存储程序代码、中断向量表、固定常量
SRAM 读写内存区0x20 开头READWRITE可读、可任意写入修改全部丢失运行缓冲区、临时变量、堆栈
外设寄存器区0x40 开头无 AREA 段定义分为只读 / 只写 / 可读可写无数据存储功能操控 GPIO、定时器、ADC 等硬件外设

四、总结

  1. 汇编中由AREA划分的程序存储内存只有两类:Flash 只读区、SRAM 读写区,不存在通用的只写内存;
  2. 大家口中的 “只写区域”,特指0x40000000起始外设寄存器中的部分控制寄存器,仅用于硬件驱动,不存放程序数据;
  3. 快速识别地址区域口诀:
    • 0x08 开头 = Flash,存放固定不变的代码与常量;
    • 0x20 开头 = SRAM,存放运行过程中需要修改的临时数据;
    • 0x40 开头 = 外设寄存器,包含只读、只写、读写三类控制地址;
  4. 单片机标准运行流程:从 Flash 读取代码与常量,在 SRAM 完成数据运算缓存,通过外设寄存器实现对外设的控制。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询