Terry 发表于 2016-1-28 12:00:36

STM32 BOOT0 和 BOOT1启动原理

本帖最后由 Terry 于 2016-1-28 14:11 编辑

   ● 第一种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦出10万次,所以不用担心芯片哪天会被擦爆!    ● 第二种启动方式是系统存储器启动方式,即我们常说的串口下载方式(ISP),不建议使用这种,速度比较慢。STM32 中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。    ● 第三种启动方式是STM32内嵌的SRAM启动。该模式用于调试。
STM32的内部闪存(FLASH)地址起始于0x08000000,一般情况下,程序文件就从此地
址开始写入。此外STM32是基于Cortex-M3内核的微控制器,其内部通过一张“中断向量表”
来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成
启动,而这张“中断向量表”的起始地址是0x08000004(0x8003000的程序中,中断向量表的地址是0x8003000),当中断来临,STM32的内部硬件机
制亦会自动将PC指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断
服务程序。
在图53.1.1中,STM32在复位后,先从0X08000004地址取出复位中断向量的地址,并跳
转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的
main函数,如图标号②所示;而我们的main函数一般都是一个死循环,在main函数执行过程
中,如果收到中断请求(发生重中断),此时STM32强制将PC指针指回中断向量表处,如图
标号③所示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服
务程序以后,程序再次返回main函数执行,如图标号⑤所示。

阿莫西林 发表于 2016-2-16 09:29:15

谢谢分享,不过还是不太明白为什么从系统存储器启动,可以将代码拷贝到falsh
页: [1]
查看完整版本: STM32 BOOT0 和 BOOT1启动原理