stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE
1、實驗?zāi)繕?/strong>:?? STM32 IAP學(xué)習(xí)時,希望有一個快捷的方式去實驗IAP與APP之間的相互跳轉(zhuǎn)。
??????????????????????? 1)驗證IAP跳轉(zhuǎn)至APP ?? 2)驗證APP通過軟件reset跳轉(zhuǎn)至IAP ??
????????????????????? (避免再一開始就實驗完整的IAP過程,編寫B(tài)ootLoader,編寫 APP,再通過PC工具下載APP代碼,然后再看是否能正常更新,過程很長,新學(xué)時可能遇到的障礙太多 )
?
2、實驗方法:?分別編寫B(tài)ootLoader 和 APP程序(兩個程序僅僅簡單的完成串口打印和跳轉(zhuǎn)工作,不設(shè)計其他功能(如接受bin文件件,更新flash等功能都不包含)),通過串口打印識別區(qū)分IAP 和APP程序。
???????????????????? 分別通過jlink在線調(diào)試的方式,先后將IAP程序和APP程序下載至STM32,實現(xiàn)IAP/APP實驗的在線調(diào)試
?
3、IAP 代碼實現(xiàn):
IAP主要流程如上圖,進入IAP后初始化,然后打印數(shù)據(jù),等待,隨后跳轉(zhuǎn)至APP
?
4、APP代碼實現(xiàn)
APP代碼流程 初始化,打印,delay,跳轉(zhuǎn)至IAP。
此處需要特別注意一點,APP程序在線調(diào)試時,發(fā)現(xiàn)會死在串口發(fā)送上。后來在UART初始化時,先將其disable,然后再enable來規(guī)避這個問題。
?
以上說明一個值得注意的問題,IAP程序在跳轉(zhuǎn)至APP程序時,可能有些狀態(tài)是沒有清楚的,導(dǎo)致APP程序在運行時引入異常,針對這類問題,APP程序的在線調(diào)試方法就非常有用的,直接在線調(diào)試可以快速定位問題。
?
5、IAP程序的在線調(diào)試
設(shè)置好ROM1即可,不需要太多配置。
?
沒有下載過APP程序的情況下,iap_load_app(FLASH_APP1_ADDR);程序不會真的跳轉(zhuǎn),會回到IAP程序繼續(xù)執(zhí)行。
?
6、APP在線調(diào)試
APP程序的在線調(diào)試非常關(guān)鍵,因為APP程序的地址不是默認地址,僅僅設(shè)置ROM1的情況下,在線調(diào)試時依然會默認進IAP程序,無法進行在線調(diào)試。
KEIL4需要完成的設(shè)置如下:
1)設(shè)置flash地址空間,ROM1
?
2)設(shè)置flash download 地址
?
3) 配置debug信息
添加ini file 。(我認為這個ini文件是在在線調(diào)試的入口調(diào)用的,這樣做可以使得在線調(diào)試直接從APP的入口處開始執(zhí)行,這樣的話就可以直接對APP進行debug)
?
設(shè)置完以上的數(shù)據(jù),IAP程序debug無誤后,再進行APP的在線調(diào)試,如下圖:
設(shè)斷點,串口直接打印APP INIT說明debug是直接從APP程序的入口處開始的(0x08010000)
?
連續(xù)運行的效果如下圖:
?
7、特別鳴謝
http://www.stmcu.org/module/forum/thread-380078-1-1.html
總結(jié)
以上是生活随笔為你收集整理的stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于STM32的IAP与APP互相跳转
- 下一篇: stm32 bootloader跳转