ARM Cortex M3&M4处理器复位流程

在这里插入图片描述
ARM规定,M3和M4处理器复位后,首先从0x00000000和0x00000004地址读取Main Stack Pointer(MSP)和reset vector(the starting address of the reset handler),分别赋值给MSP寄存器和PC寄存器,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
顺带说下,为什么STM32的Flash起始地址是0x08000000,而不是0x00000000,是为了处理器从不同的存储器启动:
1、从main Flash memory启动时,将0x08000000映射到0x00000000;
2、从system memory启动时,将0x1FFF0000映射到0x00000000;
3、从SRAM启动时,将0x20000000映射到0x00000000;
下面的memory map图中可以分别找到Flash memory、system memory和SRAM的起始地址。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在写入PC寄存器后,会触发跳转操作,从而执行reset handler函数,如下:
在这里插入图片描述
用手头的STM32L431验证:
Flash对应地址内容:
在这里插入图片描述
在这里插入图片描述
startup文件中堆和栈的大小定义:
在这里插入图片描述
在这里插入图片描述
Keil调试下寄存器的值:
在这里插入图片描述在这里插入图片描述
startup文件:
在这里插入图片描述
map文件:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
1、Flash 0x08000000和0x00000000地址处内容完全一样;
2、其他条件不变,Stack_Size增加0x100,栈顶地址增加0x100;
3、PC寄存器值为0x0800023C,map文件中Reset_Handler函数起始地址却为0x0800023D,是因为bit0置1表示Thumb Code。

下一篇,将分析startup文件和link文件,了解栈顶的地址和复位处理函数的地址是如何存到0x00000000和0x00000004地址上的。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值