GPRS網路(Air202/SIM800)升級STM32: 測試STM32遠程乒乓升級,基於(GPRS模組AT指令TCP透傳方式),定時訪問升級
- 2019 年 11 月 8 日
- 筆記
實現功能概要
BootLoader程式:
獲取上次的更新狀態,如果更新狀態是0x01 則設置更新狀態是 0xFF
注:用戶程式需要清除更新狀態為0,如果用戶程式運行錯誤,沒有清零,則重啟以後
BootLoader程式判斷更新狀態為0xFF,則認為沒有正常運行用戶程式,
就會執行切換程式文件,便會載入原先的程式文件.
如果沒有更新標誌位,則嘗試載入用戶程式.
如果有更新標誌位,STM32控制GPRS模組以TCP方式連接Web伺服器,然後發送Get 協議獲取程式文件,寫入Flash後,重啟!
每次寫入Flash 切換Flash的寫入位置,加入更新狀態檢測,更新失敗則運行上一版程式(程式回滾)
APP用戶程式:
獲取更新的狀態,清除更新狀態
如果更新狀態是 0x01 切換程式版本號
每隔30S,控制GPRS模組以TCP方式連接Web伺服器,獲取當前程式版本,如果版本不一致,寫入更新標誌,重啟單片機!
Flash配置:

測試準備工作(默認訪問我的伺服器,改為自己的伺服器,請看後面說明)
一,下載BootLoader程式(請自行下載)

二,調整波動開關位置,STM32和GPRS 串口1 通訊

三,別忘了插手機卡,還有安裝上天線

四.準備兩個串口模組,兩個串口模組的RX,分別接到單片機的PA9和PA10.
4.1注:此為監控STM32和GPRS之間的數據,看到更新的過程.

4.2 示意圖

開始測試
一.當前只下載了BootLoader程式,在BootLoader程式裡面實現更新,需要按照下面操作
長按PB5大約4S,等待指示燈快閃,鬆開PB5,指示燈閃耀3S以後,程式寫入更新標誌位,然後重啟

二.監控的數據

三.實際應用請使用一個引腳控制模組重啟
3.1 請在每個程式文件的此處修改(注,本人的板子現在未引出複位引腳,下一批板子將跟進)

3.2 如果沒有複位可能出現一直發送 AT+CIPSHUT ,模組要等到好久才有反應
現在測試可人為進行複位!

四.運行用戶程式,每隔30S訪問一次雲端程式版本

修改為連接自己的伺服器
一,修改BootLoader,和兩份用戶程式連接的Web伺服器的IP地址,埠號資訊



二,Http訪問程式文件的路徑請自行根據自己的修改,我按照我自己的說明
2.1 根據單片機程式訪問的路徑,在Web伺服器建立文件夾


2.2 拷貝記錄設備版本的updatainfo.txt文件,和用戶程式1文件(Progect.bin),用戶程式2文件(Progect2.bin)到伺服器



最終效果

三,大家設置完自己的,重新按照上面的測試一下,看下可不可以測試通過
可以自己看看是什麼問題,或者告訴我有什麼問題.
四,修改雲端版本

五,用戶程式檢測到新版本,寫入更新標誌,重啟,BootLoader更新另一份程式,重啟,運行新程式

五,測試程式有問題,實現程式回滾(由於底層處理都是一樣的,可自行參考上一節測試)
5.1 我說一下BootLoader裡面預防的一個極端問題: 用戶程式兩份全是有問題的,程式不停的在重啟
5.1.1 在執行BootLoader程式的時候,實際上載入用戶程式受控於,按鈕(我用的PB5)

5.1.2 假設出現極端情況,可讓用戶長按PB5大約4S,等待指示燈快閃,鬆開PB5,指示燈閃耀3S以後,程式寫入更新標誌位,然後重啟
其實和一開始的一樣的操作(這個也可以用來預防極端情況)

其它
一,可先下載第一份程式到單片機,讓單片機默認運行一份程式
1.1 操作步驟是先現在BootLoader程式(下載進去就可以,不需要任何配置)
1.2 下載第一份用戶程式(程式默認載入第一份用戶程式),請按照下面配置下載

此時單片機啟動以後便會載入第一份用戶程式運行.