STM32CubeMx開發之路—在線升級OTA(2/4)—BootLoader


運行環境

  • Windows10
  • STM32CubeMX Version 5.4.0
  • Keil5(MDK5) Version 5.28.0.0
  • 硬件開發板 F103RB-NUCLEO

簡介

本例程主要講解在線升級(OTA)的BooLoader的編寫.我將以我例程的BootLoader爲例, 講解BootLoader(後面會提供免費的代碼下載鏈接), 其他的大體上原理都差不多.


流程圖分析

以我歷程的BootLoader爲例:

  • 我將App2區的最後一個字節(0x0801FFFC)用來表示App2區是否有升級程序, STM32在擦除之後Flash的數據存放的都是0xFFFFFFFF, 如果有, 我們將這個地址存放0xAAAAAAAA. 具體的流程圖見下圖所示

程序編寫和分析

所需STM32的資源有:

/* 採用彙編設置棧的值 */
__asm void MSR_MSP (uint32_t ulAddr) 
{
    MSR MSP, r0   //設置Main Stack的值
    BX r14
}


/* 程序跳轉函數 */
typedef void (*Jump_Fun)(void);
void IAP_ExecuteApp (uint32_t App_Addr)
{
  Jump_Fun JumpToApp;

  if ( ( ( * ( __IO uint32_t * ) App_Addr ) & 0x2FFE0000 ) == 0x20000000 )  //檢查棧頂地址是否合法.
  {
    JumpToApp = (Jump_Fun) * ( __IO uint32_t *)(App_Addr + 4);  //用戶代碼區第二個字爲程序開始地址(復位地址)  
    MSR_MSP( * ( __IO uint32_t * ) App_Addr );                  //初始化APP堆棧指針(用戶代碼區的第一個字用於存放棧頂地址)
    JumpToApp();                                                //跳轉到APP.
  }
}
  • 在需要跳轉的地方執行這個函數就可以了IAP_ExecuteApp(Application_1_Addr);
  • 其他的代碼請參考`BootLoader源代碼

源碼

BootLoader源代碼 STM32F103rb_delay_us.zip


備註:提供一下個人微信號 Hleafleafleaf,歡迎加好友,共同學習!共同進步!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章