总结STM32 IAP串口升级

        IAP升级时,在STM Flash中会包含两个程序:IAP和APP,IAP负责,如果有要升级的APP,则将该APP替换旧APP,并运行新APP,如果没有要升级APP,则立即运行现有的APP程序。

      关键明白如下:

      1. 需要在FLASH内部,分段去存IAP和APP。在keil中,可以通过配置IROM去配置。

如APP存在0x8004000,size是0xC000空间大小的flash中。

IAP存储在0x8000000,size是0x4000存储空间上

2. IAP中通过修改SP和PC的值来,让程序通过IAP跳转到APP来执行。

  SP的值存放在哪里呢?我们通过map来看

  APP.map看到sp的值是:0x20001568,而app.bin中看到首4个字节,存放的就是该值。

APP的bin值

     所以我们设置SP就是调用__set_MSP(*(uint32_t*)(DEVICE_APP_ADDR)); // APP的首四个字节,从APP存放到flash的首地址上取值。

     PC怎么设置呢?我们看到PC指针是执行到DEVICE_APP_ADDR+4上了,这里存放的是什么呢?我们从app.map中再来查看下。

     Reset_Handler存放的地址是:0x08004101,而DEVICE_APP_ADDR+4刚好就是该地址,说明PC指针执行到了Reset_Hander函数了。

 Reset_Hander就是做什么呢?我们在*.s启动文件中可以看到,执行了SystemInit函数,然后就到了我们的main函数了。所以在IAP中通过设定SP和PC,让程序切换到了APP的栈和main函数中来。  

3.需要在APP重新去设定中断表的地址。

 原因是:IAP中有中断表,APP中也有中断表,如果我们在APP中,不去重新设定中断表地址,那么APP中的中断函数,就无法去执行到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值