问答
当前位置>首页>问答>科技问答>正文
知产
  • 知产
  • 政策
  • 科技
  • 产业链
搜索词: 专利 知识产权 软著

STM32F1的IAP程序,APP1和APP2两个应用程序交替更新程序不停重启

问题描述: 1、MCU:STM32f103vct62、升级所用端口: 串口3、FLASH分配bootloader                                0x8000000 开始#define APP1_START_ADDR     0x8010000#define APP1_END_ADDR         0x8020000     //APP1 64k#define APP2_START_ADDR     0x8021000#define APP2_END_ADDR         0x8031000     //APP2 64kAPP程序中偏移地址设置,是根据APP的位置设定的:       如果运行APP1位置的程序,偏移地址就是  0x8010000,       如果运行APP2位置的程序,便宜地址就是  0x8021000现象:1、通过串口更新固件,都往APP1位置更新,测试多次,完全正常2、更新固件,目前运行APP1程序,更新新固件到APP2位置;如果目前运行APP2位置程序,更新新固件到APP1位置      用同一个固件,交替升级到APP1 和 APP2 的位置,是没问题的     问题来了:用两个不同的固件,交替升级到APP1 和 APP2的位置,一次升级成功后,下一次升级完成,程序不停重启                      在此情况下重复三次都是相同现象,在第四次就可以进入到APP程序中运行了请问各位IAP过程中,使用两个APP升级,需要注意哪些地方呢? 谢谢

关键字: STM32 IAP Flash

阅读503

更多回答:

黄长胜:

这是两个相同的程序,设置IROM1的起始地址分别为 0x8010000 和 0x8021000,生成的bin文件的复位地址分别为  08 01 11 55 和 08 02 21 55,这个地址的差值更好为0x11000,和IROM的地址差刚好吻合,这个肯定不是巧合然后我就按照下面办法生成bin文件:1.  bin1更新时需置于 0x8010000开始的地址,生成bin文件时,设置向量表偏移0x10000,KEIL设置IROM1:0x80100002.  bin2更新时需置于 0x8021000开始的地址,生成bin文件时,设置向量表偏移0x21000,KEIL设置IROM1:0x8021000也就是说,不同置于不同flash地址的程序的bin文件单独生成,地址做好匹配固件升级测试10次,是没问题的然后我把bin1升级到APP2的位置,把bin2升级到APP1的位置,然后就不行了,bootloader执行到跳转之后就没有然后了但是,不太可能每次固件升级还得记录固件的位置啊,这样太不智能,太麻烦了,~~~~~~~~~~~~~~~~~~~~~~~~~~~  分割线   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里就真的不知道如何处理了,因为bin文件可能位于不同的位置,bin文件里面带的地址该如何处理呢?

展开∨

2020-03-18 15:38


提交