在平時支持客戶的 過程中,經常會遇到客戶在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的程序編寫中,能規避以上問題點,則可以順利進行跳轉,避免出現死機等問題。
評論