1. 程式人生 > >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地址處的內容,然後執行
 

  1. typedf void(*pfunc)(void);

  2. ((pfunc)(*(uint32_t*)(application_addr + 0x00000004)))();