STM32 APP跳转到IAP

之前的项目一直使用IAP跳转到APP很顺利,新项目需要实现APP跳转到IAP,一开始想的挺简单的,就直接在APP里把地址跳到IAP就行,结果发现是可以执行到IAP的main函数,然后就卡死了。卡死的位置在

 startup文件的第273行。感觉是中断向量表有问题, 因为在APP中是做了中断向量表偏移的,

于是在IAP的开始,也加上了SCB->VTOR = FLASH_BASE;  认为这样就能把中断表给偏移回来,结果没什么变化, 然后在APP里跳转IAP之前,禁止总中断,清各种的中断标志,结果还是照旧。

最后没办法,在APP里,跳转前先软复位,然后在main第一行跳转到IAP才行了。感觉还是中断表哪里没搞对,待以后继续研究。

int nAPPToIAPFlag =0; //重要,必须要赋值,不然软重启后之前赋值了1也会再次清理成0, 具体原因可查看 ARM的RO ZI 区的定义。

if(升级文件下载完毕)

{

        nAPPToIAPFlag = 1;
        System_SoftReset();         //升级成功后,延时3秒重启

}

int main(void)
{
    int i;
    
    if(nAPPToIAPFlag == 1){
        nAPPToIAPFlag = 0;
        iap_load_app(0x8000000);
    }

/*****************************2021-8-21补充***********************************************/

发现了跳到 startup文件的第273行 .B这里的原因, 是IAP程序中有开启定时器3,虽然跳转时关闭了定时器但没清中断标志,APP中有使用到这个定时器3,因使用的查询方式,偷懒未定义中断入口函数, ENABLE TIM3后, TIM3找不到中断入口。导致跳到.B

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值