[STM32F4] STM32IAP升级 bootoader跳转到freeRTOS死机解决方案。

[复制链接]
liao6 发表于 2025-8-21 14:59 | 显示全部楼层 |阅读模式
一、问题描述
        bootloader跳转到APP时,app执行完初始化程序后死机?

二、分析问题
        第一步,执行app时死机死到哪里?通过DEBUG调试发现死到hardfault_handler()函数中,硬件错误,导致硬件错误的原因一般都是中断异常引起的。
        第二步,找到问题,然后分析什么原因导致硬件错误?一般bootloader跳转到APP时要关闭app中用到的中断,那么查看系统中用到的中断:串口中断、滴答定时器中断,所以,跳转之前要关闭这两个中断:_disable_irq()和systick。

三、解决问题
        关闭中断之后,跳转执行app正常。
void iap_load_app(u32 appxaddr)//
{
    SysTick->CTRL = 0X00;//禁止SysTick
    SysTick->LOAD = 0;
    SysTick->VAL = 0;
    __disable_irq();
    jump2app=(iapfun)*(vu32*)(appxaddr+4);                //用户代码区第二个字为程序开始地址(复位地址)               
    MSR_MSP(*(vu32*)appxaddr);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
    jump2app();                                                                        //跳转到APP.
}

四,结论
       1.bootloader跳转到app之前要关闭app中用到的中断,不然就会出现硬件错误导致死机;
       2.对app的内部机制要比较了解,比如:用到哪些中断、外设,这样遇到问题才能更好分析,不要停留在会用层面,一定要了解透彻,这样无论遇到什么问题,都能有一个正确的分析思路。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

8

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部