[其他ST产品]

STM32 bootloader APP 复位执行流程

[复制链接]
167|0
手机看帖
扫描二维码
随时随地手机跟帖
kmnqhaha|  楼主 | 2023-5-25 16:23 | 显示全部楼层 |阅读模式
STM32 bootloader APP 复位执行流程
测试环境

1、STM32f105RC flash空间分配 bootloadr [0x800 0000 0x801 8000] app[0x801 8000];
2、boot option:flash区
复位执行流程

1、boot option 选择flash后, flash重映像到0x00 00000【同时 0x800 0000也可以正常访问,代码一样】;
2、RESET后,代码从0x00 0000处执行,首先取sp指针;
3、从0x00 0004处取出复位向量【地址为0x80*********,处于flash真实物理区】;
4、执行复位代码,跳入bootloader的main函数中;
5、bootloader执行完毕后,由bootlaodr取出app的复位向量;
6、执行app复位代码,跳入app的main函数中;
7、至此,复位执行完成,app正常运行。
写在最后

1、进入app中,外设等寄存器尽量“干净”;
2、bootloader退出后,不要有误操作RAM的动作【尤其关注bootloader中有启用DMA行为】
3、进入app中,及时重定向中断向量表【SCB->VTOR】;而且,查找代码中所有SCB->VTOR,避免别处误改此值,尤其有USB移植代码的程序。

尽量“干净”方法补充:
1)hal库:HAL_DeInit();
2)关闭所有中断:__set_PRIMASK(1)
3)boot检测方式尽量简单

关于HAL库:HAL_DeInit(); 作用范围解释
翻看HAL_DeInit(); 可知,仅仅是对外设(APB1 APB2 AHB1 AHB2 AHB3 挂接的设备,比如CAN TIM GPIO DMA等)进行反初始化,涉及到ARM核(比如NVIC system timer等)并未进行反初始化,需要特别注意!!!!
————————————————
版权声明:本文为CSDN博主「weixin_43923755」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43923755/article/details/95166185

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

98

帖子

1

粉丝