stm32 bootloader跳转
生活随笔
收集整理的這篇文章主要介紹了
stm32 bootloader跳转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
stm32執行完loader程序后如何跳轉到應用程序呢,一共有四件事要做:
第一,關閉外設中斷,關閉外設時鐘,失能外設功能,如果不關閉,跳轉到app區后會產生各種奇怪的問題
第二,重設中斷向量表位置,設置在app程序的起始地址
根據stm32中斷向量表的定義,表的地址就是可執行程序的起始地址,設置好后方便應用程序進入中斷后可以找到對應的中斷程序入口
第三,重設堆棧指針,設置在app程序的起始地址,application_addr + 0x00000000
stm32復位后的第一件事就是取堆棧地址,此處跳轉也是一樣,第一件事就是取得堆棧地址,想想ucos中切到新任務第一件事不也是找到堆棧地址嗎
第四,取出app程序的main函數地址,application_addr + 0x00000004
stm32復位后的第二件事就是找到復位地址,然后從里面取得main函數的地址,根據stm32中斷向量表的定義,復位地址的偏移量是0x04,緊挨著堆棧棧頂地址,因此需要取得application_addr + 0x00000004地址處的內容,然后執行
?
typedf void(*pfunc)(void);
((pfunc)(*(uint32_t*)(application_addr + 0x00000004)))();
?
總結
以上是生活随笔為你收集整理的stm32 bootloader跳转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32 IAP APP 相互跳转实验
- 下一篇: 解决烧录问题:Jlink的三线制SWD方