- STM32CubeMx開發之路—在線升級OTA(1/4)—基礎知識
- STM32CubeMx開發之路—在線升級OTA(2/4)—BootLoader
- STM32CubeMx開發之路—在線升級OTA(3/4)—App
- STM32CubeMx開發之路—在線升級OTA(4/4)—測試
- STM32CubeMx開發之路—在線升級OTA—(另一種思路)
運行環境
Windows10
STM32CubeMX
Version 5.4.0
Keil5(MDK5)
Version 5.28.0.0
硬件開發板
F103RB-NUCLEO
簡介
本例程主要講解在線升級(OTA)的基礎知識, 主要是針對IAP OTA
從原理分析
, 分區劃分
, 到代碼編寫
和實驗驗證
等過程闡述這一過程. 幫助大家加深對OTA的認識.
什麼是BootLoader?
BootLoader
可以理解成是引導程序, 它的作用是啓動正式的App應用程序
.
換言之, BootLoader
是一個程序, App也是一個程序, BootLoader程序
是用於啓動App程序
的.
STM32中的程序在哪兒?
正常情況下, 我們寫的程序都是放在STM32片內Flash中(暫不考慮外擴Flash).
我們寫的代碼最終會變成二進制文件, 放進Flash中
感興趣的話可以在Keil
>>>Debug
>>>Memory
中查看, 右邊Memory窗口存儲的就是代碼
接下來就可以進入正題了.
進行分區
既然我們寫的程序都會變成二進制文件存放到Flash中, 那麼我們就可以進一步對我們程序進行分區.
我使用的是F103RB-NUCLEO開發板
,他的Flash一共128頁, 每頁1K.見下圖:
以它爲例, 我將它分爲三個區.BootLoader區
、 App1區
、 App2區(備份區)
具體劃分如下圖:
BootLoader區
存放啓動代碼App1區
存放應用代碼App2區
存放暫存的升級代碼
總體流程圖
- 先執行
BootLoader
程序, 先去檢查APP2
區有沒有程序, 如果有就將App2區(備份區)的程序拷貝到App1區
, 然後再跳轉去執行App1
的程序. - 然後執行
App1
程序, 因爲BootLoader
和App1
這兩個程序的向量表不一樣, 所以跳轉到App1
之後第一步是先去更改程序的向量表. 然後再去執行其他的應用程序. - 在應用程序裏面會加入程序升級的部分, 這部分主要工作是拿到升級程序, 然後將他們放到
App2區(備份區)
, 以便下次啓動的時候通過BootLoader
更新App1
的程序.
流程圖如下圖所示:
備註:提供一下個人微信號 Hleafleafleaf,歡迎加好友,共同學習!共同進步!