1. 程式人生 > 實用技巧 >STM32F407利用4G模組進行IAP遠端升級

STM32F407利用4G模組進行IAP遠端升級

一.硬體資源

  1. STM32F407VET6 flash:512K
  2. SIMCOM7600CE模組(MQTT)

二.軟體情況

工程程式碼分兩個來做,一個是BootLoader工程程式碼,一個是APP應用工程程式碼。

注意對flash進行分割槽,這裡我分4個區域,bootloader區、APP1區(執行的程式)、APP2區(儲存待更新的程式)、FLAG區(標誌位+待更新程式位元組數)資料。但是注意這4部分資料必須在不同的扇區,不能有兩部分資料處於同一扇區,因為寫地址如果非 0XFF,那麼會先擦除整個扇區且不儲存扇區資料。建議使用1024K flash,操作空間更大一點。

基礎知識就不多說了,只提一下思路和關鍵點:

思路:裝置上電覆位,執行BootLoader程式碼,BootLoader程式碼主要是根據FLAG區判斷是否需要遠端更新,如果不需要,則跳轉至APP1區,執行應用程式程式碼;如果需要,則讀取flash中APP2區域的資料,寫進APP1區,然後清空FLAG區,跳轉APP1區執行。主程式主要就是接收伺服器的更新程式碼,寫進APP2區,置位FLAG,然後重啟。

關鍵點:

1.BootLoader工程程式碼需要在MDK中設定程式地址,程式是從0X08000000開始執行的,佔用了128K,所以設定如下圖所示:

2.APP的設定。

APP起始執行地址0X08020000 以及flash大小128K

這裡要注意,中斷向量表的問題。在主程式初始化的時候,對中斷向量表進行偏移:

//中斷向量表偏移
SCB->VTOR = FLASH_BASE | 0x20000;

3.這裡我們遠端燒寫的是bin檔案而不是hex檔案,所以還需要設定MDK,生產bin檔案。(具體路徑根據你的MDK安裝路徑來寫)

還有很多需要優化的地方,比如遠端升級的時候傳輸中斷怎麼辦,如何重回上一個版本,就不多說了。