STM32存储器地址映射

本文详细介绍了STM32的存储器地址映射,包括代码区和RAM区的具体范围,并深入探讨了支持位带操作的内存区域及其计算公式。

这里写图片描述
上图是STM32的存储器地址映射图,地址范围为:0x0000_0000-0xFFFF_FFFF;其中代码区的地址是从0x0800_0000开始的,结束于0x0800_0000+芯片的Flash的大小,RAM的起始地址是0x2000_0000,结束于0x2000_0000+芯片的RAM大小。

支持位带操作的两个内存区的范围是:
0x2000_0000‐0x200F_FFFF( SRAM 区中的最低 1MB)
0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB)

其中对于SRAM位带区的某个比特位,假设它的地址为Addr,位序号为n(0<=n<=7),则该比特在别名区的地址为:
Bit_Addr=0x22000000+((Addr-0x20000000)*8+n)*4=0x22000000+(Addr-0x20000000)*32+n*4;

对于片上外设位带区的某个比特位,假设它的地址为Addr,位序号为n(0<=n<=7),则该比特在别名区的地址为:
Bit_Addr=0x42000000+((Addr-0x40000000)*8+n)*4=0x42000000+(Addr-0x40000000)*32+n*4;

### STM32 存储器映射详解 STM32存储器地址空间被划分为大小相等的8块区域,每块区域大小为512MB(如:0x20000000~0x40000000)。这种划分使得各个功能模块能够有序地分配到特定的地址范围内[^2]。 #### Flash 和 SRAM 的重要性 对STM32存储器知识的掌握,实际上主要集中在对Flash和SRAM这两个区域的理解上。Flash用于存放程序代码以及常量数据;而SRAM则用来保存运行期间产生的临时变量和其他动态数据。这些部分构成了STM32正常工作所必需的基础组件之一。 #### 地址空间的具体分布 具体来说,在STM32内部: - **低地址区 (0x0000_0000 ~ 0x0FFF_FFFF)** 主要由系统ROM、外部设备接口以及其他特殊用途的空间组成; - **中间地址区 (0x2000_0000 ~ 0x3FFF_FFFF)** 是内部SRAM所在的位置,其中包含了多个子区间供不同类型的RAM使用; - **高地址区 (0x4000_0000 ~ 0xFFFF_FFFF)** 则主要用于I/O端口寄存器及其他外设资源的映射[^4]。 对于具体的型号而言,《STM32F103xCDE 数据手册》提供了更详细的memory mapping说明,包括各版本间可能存在差异的地方[^1]。 ```cpp // 示例:访问位于指定基地址处的一个外设寄存器 #define PERIPH_BASE ((uint32_t)0x40000000) // 外设基地址 #define GPIOA_OFFSET ((uint32_t)0x00000800) // GPIOA偏移量 #define GPIOA ((GPIO_TypeDef *) (PERIPH_BASE + GPIOA_OFFSET)) ``` 上述代码展示了如何定义并访问一个位于固定位置上的外设寄存器实例。这里`PERIPH_BASE`代表所有外设共享的基本起点,而`GPIOA_OFFSET`则是相对于该基础之上的额外位移值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值