ESA2GJK1DH1K升級篇: STM32遠程乒乓升級,基於WIFI模塊AT指令TCP透傳方式,定時訪問升級


 

 

實現功能概要

  用戶程序定時使用http訪問雲端的程序版本,

  如果版本不一致,設置更新標志,重啟單片機

  BootLoader程序執行判斷有更新標志

  通過http下載最新的升級文件,升級完成,重啟,執行新程序.

 

測試准備工作(默認訪問我的服務器,改為自己的服務器,請看后面說明)

  

一,下載BootLoader程序(請自行下載)

  

二,調整波動開關位置,STM32和Wi-Fi 串口 通信

  

 

三,短接STM32的PB2和Wi-Fi模塊的RST引腳(內部程序使用該引腳硬件復位Wi-Fi)

 

  

 

四.兩個串口模塊的RX,分別接到單片機的PA9和PA10.

  4.1注:此為監控STM32和Wi-Fi之間的數據,看到更新的過程.

    

 

  4.2 示意圖

    

 

開始測試(默認訪問測試服務器上的程序文件)

一,打開可以配網的APP,給Wi-Fi配網

  請參考基礎篇: https://www.cnblogs.com/yangfengwu/p/11760590.html

  

二,BootLoader程序里面配網成功后,默認重啟以后更新程序文件,更新完成以后自動加載更新的用戶程序

  下面說明一下監控的數據

  2.1 單片機發送數據,(獲取雲端程序文件的版本信息)

    

 

 

 

  2.2 其實就是獲取的這個文件,我把這個文件放在了雲服務器上

    

 

 

 

 

 

 

  2.3 獲取程序文件(訪問我提供的測試服務器上的)

    

 

 

  2.4 如果升級沒有問題重啟以后運行剛升級進去的用戶程序

 

    

 

 

關於乒乓升級

1.簡要

 

 

  每次更新的時候 用戶程序1和用戶程序2來回的切換寫入運行

  BootLoader程序主要做的工作就是如果上次運行的用戶程序1

  則獲取第二份用戶程序,然后把程序文件寫入用戶程序2地址

  如果上次運行的用戶程序2

  則獲取第一份用戶程序,然后把程序文件寫入用戶程序1地址

 

2.關於源碼中的兩份用戶程序

 

 

首先,兩份用戶程序除了設置的中斷偏移不一樣以外其他完全一樣!

 

 

 

 

 

 

 

 

不同的偏移值使其能運行在不同的Flash地址上

 

STM32F10xTemplate 設置的偏移值只能運行在 ↓

 

 

 

 

 

 

 

 

 

STM32F10xTemplate - 副本  設置的偏移值只能運行在 ↓

 

 

 

 

 

 

3.升級切換文件流程

首先,咱們需要每次要升級的時候需要把運行在不同地址,

功能完全一樣的兩份用戶程序的bin文件放到雲端,

(編譯 STM32F10xTemplate 產生的bin文件

和編譯 STM32F10xTemplate - 副本 產生的bin文件)

以供單片機下載.

假設當前單片機是在用戶程序1 地址加載運行的程序

那么單片機下次升級就需要下載 能在用戶程序2 地址運行的程序文件

然后寫到 用戶程序2 地址,然后單片機就加載用戶程序2 地址上的程序運行

下次再升級就是下載 能在用戶程序1 地址運行的程序文件

 

這里說一下為什么需要同時把兩份文件放上去.

大家可能會想,假設我單片機一開始是在用戶程序1 地址加載運行的程序

那么我單片機升級肯定是下載 能在用戶程序2 地址運行的程序文件

我直接把  能在用戶程序2 地址運行的一個程序文件放到雲端不就可以了

我單片機如果接着再升級,肯定是下載 能在用戶程序1 地址運行的程序文件

我直接把  能在用戶程序1 地址運行的一個程序文件放到雲端不就可以了

干嘛非要把 能在兩個地址運行的執行功能一樣的程序放上去呢??

 

我只問一句:

大家在看到軟件更新的時候,大家是否真的去執行更新???

是不是有時候都過去好幾個版本了才選擇升級??

 

大白話就是:

假設有兩個用戶買了咱的產品

假設一開始都是在用戶程序1 地址加載運行的程序

然后第一次升級的時候,其中一個用戶升級了

另一個用戶沒有執行升級.

假設咱又換了下版本,需要再升級!

現在的情況就變為:

第一個用戶再次升級的時候,需要下載能在用戶程序1 地址運行的程序文件

 

第二個用戶由於第一次沒有升級,

再次更新的時候需要下載能在用戶程序2 地址運行的程序文件

 

所以......

大家一定是要把在兩個地址運行的執行功能一樣的程序放上去!

 

 

應用在自己的服務器--配置

一,修改BootLoader和用戶程序連接的Web服務器的IP地址,端口號信息

  

 

 

 

 

 

  

 

 

 

 

   

 

二,Http訪問程序文件的路徑請自行根據自己的修改,我按照我自己的說明

  2.1 根據單片機程序訪問的http路徑,在Web服務器建立文件夾

  

  char PathVersionInfo[50]="/hardware/STM32_Timing_AT8266_SUM/updatainfo.txt";//程序文件版本路徑
  char PathUser1bin[50]="/hardware/STM32_Timing_AT8266_SUM/Progect.bin";//運行在地址1上的程序文件路徑
  char PathUser2bin[50]="/hardware/STM32_Timing_AT8266_SUM/Progect2.bin";//運行在地址2上的程序文件路徑

 

    

    

 

  2.2 打開上位機軟件,計算兩份用戶程序的SUM值

    

    

  2.3 計算運行在地址1上的程序文件的校驗值,並替換SumBin1的字段值

    

 

  2.4 計算運行在地址2上的程序文件的校驗值,並替換SumBin2的字段值

   

 

 

 

 

 

 

   

   

 

 

 

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

    

    

 

 

    

 

 

 

  2.5 最終效果

    

修改完了按照文章一開始的測試

  升級成功以后用戶程序里面在定時詢問是不是有新版本

  咱剛升級進去的肯定是新版本.

  咱到雲端修改下版本

 

修改雲端版本

一,修改雲端版本

  

 

 

 

 

 

 

 

二,用戶程序檢測到新版本,寫入更新標志,重啟,

 BootLoader獲取更新另一份程序,重啟,運行新程序

  

 

 

 

 

其它

一,可先下載第一份程序到單片機,讓單片機默認運行一份程序

  1.1 操作步驟是先下載BootLoader程序(下載進去就可以,不需要任何配置)

  1.2 下載第一份用戶程序(程序默認加載第一份用戶程序),請按照下面配置下載

    

 

 

 

 

    

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

    

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM