STM32单片机内存映射

  • 单片机的Flash,RAM,各个系统寄存器,共享同一地址空间
    32位单片机,意味着这个地址空间有2^32 byte,即4G,完全足够分配给实际的存储。
    所以所有的真实存储会映射到同一的4G大小的地址空间内,有序排放。
    -以STM32G4单片机为例
    在这里插入图片描述
    几点:
  • 代码段:存放程序等,由真实的Flash映射到这段
  • RAM段:存放变量,或者特殊情况下(如内存模式调试等)的代码
  • 堆(heap)和栈(stack):会被分配到RAM段内。堆可以由用户程序用malloc等函数使用,栈用作局部变量和函数传递参数。
  • 全局变量:每个变量符号对应一个在RAM内的地址(编译链接的时候分配确定地址,这与堆heap不同,堆是在代码执行时系统分配空闲的地址)
  • 有初始值的变量:初始化值在Flash段存着,初始化的时候该值会被存到变量的地址内。
  • 全局常量也在RAM里,以提高存取速度,其数值也是存在Flash内,在系统启动的时候初始化,把值写入该地址内。
  • 系统的专用寄存器,用作决定各外设(时钟、USART、ADC等)如何工作、以及显示它们的当前状态等,也被映射到固定的地址空间,所以如果知道各寄存器的地址和作用可以用代码直接读取和修改来使用外设,不记得就用库函数,好记些。
  • 中断向量:在一片连续的地址空间,存储着各个中断处理程序代码的开始地址(Flash内),当某个中断事件发生,而中断又是允许时,系统会找到对应的中断向量,从里面取出程序代码地址,然后跳到那里去执行中断服务程序。
  • 系统启动时:由BOOT0(/BOOT1)的0/1状态,决定从哪里开始取出堆栈开始地址和程序起始地址。
### 32单片机内存映射机制与实现原理 #### 内存映射的概念 在单片机设计中,无论是RAM、ROM还是寄存器,它们都属于实际存在的物理存储设备。为了便于访问这些资源,单片机会通过地址总线为每个存储单元分配唯一的逻辑地址,这一过程被称为内存映射[^1]。 对于32单片机而言,其内部架构通常基于哈佛结构或冯·诺依曼结构,能够支持更大的寻址空间以及更高效的指令执行流程。这种特性使得32单片机可以管理更大范围的存储区域,并提供灵活的配置选项来优化性能。 #### STM32系列中的具体应用案例 以STM32F1大容量芯片为例,在该类微控制器的设计理念下,内核负责协调整个系统的运行状态并处理来自不同模块的数据请求;而存储器则分为程序代码存放区(Flash ROM)、数据暂存区(SRAM),以及其他专用功能区块如EEPROM模拟接口等部分[^2]。此外还包括各类外设寄存器用于连接外部世界的各种传感器或者驱动装置等功能组件。 当涉及到具体的实现细节时: - **地址解码电路**:这是完成从虚拟到实体转换的关键环节之一。它会依据当前所选模式下的规则解析输入信号序列从而定位目标位置。 - **重定向技术**:某些高级型号还允许用户自定义初始启动阶段加载引导程序的位置参数设置,默认情况下是从闪存开始读取第一条命令字节串列直到遇到跳转指示符为止才会转向其他分区继续后续动作链路构建过程。 以下是关于如何初始化一个简单的GPIO端口配置的例子展示: ```c #include "stm32f10x.h" void GPIO_Configuration(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口时钟 GPIO_InitTypeDef GPIO_InitStructure; /* 配置 PC8 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最大速度50Mhz GPIO_Init(GPIOC,&GPIO_InitStructure); } int main(){ GPIO_Configuration(); while(1){ GPIO_SetBits(GPIOC,GPIO_Pin_8); //点亮LED灯 Delay_ms(500); //延时函数需自行编写 GPIO_ResetBits(GPIOC,GPIO_Pin_8); //熄灭LED灯 Delay_ms(500); } } ``` 上述代码片段展示了如何利用标准库APIs对指定引脚进行基本方向设定及高低电平切换操作的方法论思路。 #### 总结说明 综上所述,通过对底层硬件层面深入理解加上合理运用软件开发工具包所提供的便利条件相结合的方式可以帮助我们更好地掌握有关于现代嵌入式系统领域内的专业知识技能点集合体——即所谓“32单片机”的核心概念及其背后隐藏的工作原理所在之处!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值