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 下載第一份用戶程序(程序默認加載第一份用戶程序),請按照下面配置下載

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