STM32 bootloader APP 复位执行流程

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等)并未进行反初始化,需要特别注意!!!!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
STM32 bootloader app合并是指将MCU的启动程序和应用程序合并到一起,可以在单个MCU中实现启动程序和应用程序两种不同的功能。这种技术有助于简化系统设计和开发流程,减少成本和减少系统板子的体积。 在STM32单片机开发中,bootloaderapp分别是分开编写的。bootloader在芯片出厂后就已经存在,主要负责系统的初始化、底层硬件的配置以及app的加载、升级和运行。app是用户程序,包括主函数等,通常是由开发人员或客户按照需求编写的。 为了实现bootloaderapp的合并,需要在编写app时做一些特殊处理。主要有以下几个方面: 1.确定代码入口 合并后的代码需要在单片机上运行,所以需要确定代码的入口地址。一般情况下,bootloader的代码会占用一些内存,app的代码入口需要从bootloader的后面开始。如果bootloader占用的内存不一定严格固定,可以使用一个全局变量来指示app的入口地址。 2.禁用某些功能 为了保证bootloader正常运行,app中有些功能不能使用。例如,如果app中涉及到修改bootloader中的某些参数或实现特定的外设控制,可能会干扰bootloader的正常工作。解决这个问题的方法是,在app中禁用相关的功能。 3.编写代码复位程序 合并后的代码需要能够执行复位操作,即允许app重新启动。为了实现这一功能,需要编写复位程序(Reset)。 总之,STM32 bootloader app的合并不是一件简单的事情,需要开发人员根据具体应用需求做出相应的处理,确保代码的可靠性和运行稳定性。但是,在现代嵌入式系统中,将bootloaderapp合并在一起已经成为常见技术,为MCU的开发提供了更大的灵活性和优秀性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值