在平时支持客户的 过程中,经常会遇到客户在IAP程序跳转APP程序中,出现跳转失败,死机等问题,以下就这些问题发生的原因和跳转注意事项进行说明。
首先明确2个基本概念:
IAP:In applicating Programing,在应用编程(通过用户自己写的的IAP程序来实现,bootloader(启动引导程序)为IAP程序)
APP:应用程序
参考STM32F4例程路径:
D:\ST\MCU\FW\F4\en.stm32cubef4\STM32Cube_FW_F4_V1.21.0\Projects\STM324x9I_EVAL\Applications\IAP;
以下程序是IAP程序的main()函数(IAP_Main):
如上代码中#define APPLICATION_ADDRESS (uint32_t)0x08008000
对应要跳转的APP程序地址;
IAP程序对应的中断向量起始地址如下(IAR,*.icf文件,可以在IAR option-Link中直接配置):
APP程序:IAP_binary_template
APP程序注意3点:
1.Icf文件配置如下:
中断向量表的启始地址对应IAP的跳转地址:0x08008000(0x08000000+0x8000);
中断向量偏移地址对应到跳转偏移量;
2.#define VECT_TAB_OFFSET 0x8000
在确定了以上均没有问题后,如果客户还反馈有跳转死机问题,还要注意2点:
- 确认在跳转之前是否有关中断,中断需要把对应打开的外部中断都关掉,只关总中断在进入APP之后再打开总中断,打开总中断之后在boot中没有关闭的中断又打开了,但是app中对应的地址和boot,所以打开中断会导致死机。
- 跳转前把用到的外设全部释放。
如下为只关闭总中断没有关闭其他中断导致死机的错误示范:
STM32中,IAP跳转APP的程序编写中,能规避以上问题点,则可以顺利进行跳转,避免出现死机等问题。
评论