其他分享
首页 > 其他分享> > stm32上电启动流程

stm32上电启动流程

作者:互联网

 

 

 先说说MDK编译好后的显示的。

上图第三行是烧写到FLASH的大小,第二行(可修改的数据)是占用SRAM的大小


1、stm32一开始上电的时候,按理来说是从0x0000 0000开始读取第一条指令的,但M3系列的不同,通过boot0,boot1上电状态的不同,进入不同的工作模式,取得第一条指令的地址也就不同了。

(当然,上述地址也是可以更改的)

 

 

 

 

 

 

同时,stm32内部的该寄存器记录了,向量表偏移量的值

 

2、0x08000000(代码区)的一开始位置有一张中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。

 

 程序会先取出0x08000000的值,给sp寄存器。

再接着取0x08000004的值(即复位中断程序),给pc寄存器,去执行它

 

 

 如图,sp=0x20000690     pc=80001101

 

我们可以从生成的******.map文件中看到

 

 pc指向的位置就是复位中断服务的入口,进入之后,时钟初始化,然后跳转__main函数,最后进入mian函数,来到C的世界

 

 

3、那么sp的值大小有时怎么算出来的呢

就是根据最上面RW SIZE的数值大小,加上MDK里设置的0x20000000的初始值,得出的

但其实,有时候会发现自己写的程序(初始化的全局变量,静态变量之类)并没有占有这么大的空间。那RW SIZE的数值大小有时哪来的呢

上图为.map文件里的内容

看得出只有.data和.bss才是用户自己添加的代码占用空间大小

其他的HEAP,STACK都是别文件里添加上的,比如启动文件

 

标签:表定,中断向量,引脚,复位,上电,流程,stm32,地址
来源: https://www.cnblogs.com/KingZhan/p/15660892.html