實現功能概要
用戶程序定時使用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 下載第一份用戶程序(程序默認加載第一份用戶程序),請按照下面配置下載
此時單片機啟動以后便會運行第一份用戶程序.