STM32芯片的启动过程

1、Boot0、Boot1选择启动方式(boot0/1==0/1)
        boot引脚可以决定芯片是怎么启动的,第一种是从flash(主闪存存储器)启动,第二种是SRAM启动,第三种是从系统存储器。

        注意:STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式都是将各自存储空间的地址映射到0x00000000,相当于是从三种各自对应区域的首地址开始启动。

2、初始化sp、pc指针
        当系统复位后,处理器从向量表中读取前八个字节,也就是两条指令,前四个字节存入 MSP,后四个字节为复位向量,也就是程序执行的起始地址将 0x08000000 位置存放的堆栈栈顶地址存放到 SP 中(MSP)。将 0x08000004 位置存放的向量地址装入 PC 程序计数器
sp=_initial_sp、pc=Reset_Handler,PC指针会从其指向的物理地址取出第 1 条指令开始执行程序,也就是开始执行复位中断服务程序 Reset_Handler,然后从Reset_Handler处开始执行代码。

3、进入复位中断程序(初始化时钟、执行__main函数) 
        真正意义上执行的第一行代码就是执行复位中断,板子上的reset按键也是个复位中断,按下之后就进入复位了,所以进入复位中断就是一开始做的事情。
        
复位中断中做了什么呢?除了将中断向量表进行初始化之后,还有初始化时钟,执行__main函数,这个是C库里面提供的函数,这个函数最终会调用main函数,进入到自己写的程序中。

4、进入main函数
        启动过程的最后也就是进入到C文件中的main函数。
5、STM32启动流程图:

那么对于芯片上电以后的情况,大致可以分为以下几步:
1、芯片上电时,执行复位中断。
2、执行复位中断服务函数,初始化系统时钟,再执行__main函数。
3、__main函数调用main函数。
4、进入main函数中的while死循环。
5、接受中断,从中断向量表找到中断服务函数。
6、执行中断服务函数。


 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值