21-STM32+ESP8266+AIR202/302遠端升級方案-擴充套件例程-STM32F407VET6+ESP8266(WiFi)遠端升級微控制器程式(支援HTTPS,支援分段下載)
阿新 • • 發佈:2021-12-06
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
這節測試一下STM32F407VET6通過ESP8266(WiFi)使用http或https遠端下載升級微控制器程式
我已經把韌體檔案放在了自己的伺服器上
預設使用本人提供的下載路徑測試
檔案路徑: 網站根目錄->ota->hardware->STM32F4xxESP8266BK
user_crc.bin:是韌體程式檔案.
該韌體程式檔案並不是直接可以執行的檔案
裡面的資料每隔128位元組後面增加2位CRC校驗位
微控制器下載以後每隔130位元組校驗一下資料,然後把前128位元組寫入Flash.
加入CRC校驗讓升級變的穩定可靠.
info.txt檔案內容:
version:0.0.1 雲端韌體程式版本
url:http://mnif.cn/ota/hardware/STM32F4xxESP8266BK/user_crc.bin 韌體程式下載地址
"info":"1.解決了部分BUG2.優化了部分程式" 使用APP控制升級時,APP的提示資訊.
升級過程:
注:使用TCP連線Web伺服器,然後傳送相應的GET指令獲取檔案!
使用者程式裡面每隔一定時間控制網路模組使用http的GET指令獲取雲端info.txt檔案
然後從檔案裡面獲取伺服器裡面的韌體程式版本和韌體程式下載地址等資訊
如果與自身版本號對比不一致,就把韌體程式下載地址寫入flash,然後設定更新標誌,重啟,
重啟執行BootLoader以後,BootLoader程式檢測到更新標誌,則提取韌體下載的地址,
然後使用http下載程式檔案,把程式檔案寫入flash,完成升級.
備份升級流程圖
連線引腳說明
使用串列埠1作為了日誌列印,串列埠2連線模組.
(微控制器)PA2 -- RX(模組)
(微控制器)PA3 -- TX(模組)
(微控制器)PA8 -- RST(模組復位引腳)
另外:
PA6作為了指示燈
PE4作為了按鍵
指示燈和按鍵不是必須的!
可以按照自己的板子在各個檔案裡面修改引腳定義
測試
1.使用下載器下載BootLoader程式
正常情況下串列埠1會列印如下日誌
2.開啟使用者程式,配置模組連線的路由器資訊
配置下模組連線的路由器(根據自己家的路由器修改)
3.使用下載器下載使用者程式
4.觀察日誌,說明執行流程
開始執行使用者程式,預設提供的使用者程式設定的程式版本是0.0.0
使用者程式控制模組連線路由器
使用者程式控制模組連線伺服器,使用get指令獲取獲取伺服器上的韌體資訊檔案 info.txt
檢測到版本不一致以後,把獲取的url儲存到flash,設定更新標誌,重啟.
重啟之後BootLoader提取url
BootLoader傳送get指令獲取程式韌體
升級完成以後,執行新下載的程式.
使用者程式每隔一段時間控制模組連線伺服器,使用get指令獲取獲取伺服器上的韌體資訊檔案 info.txt
現在程式版本和上面的是一致的,所以不需要更新
應用到自己的伺服器
1,首先確定好程式檔案在伺服器的路徑
關於本人伺服器資料夾解釋:(自己隨意就好,最後的資料夾命名建議使用產品的型號)
html:網站根目錄
ota: ota升級
hardware : 硬體程式
STM32F4xxESP8266BK: 作為產品的型號(根據自己的產品型號修改)
我把韌體放到了裡面那麼韌體程式下載地址為:
http://伺服器IP地址/ota/hardware/STM32F4xxESP8266BK/user_crc.bin
那麼韌體資訊的下載地址為:
http://伺服器IP地址/ota/hardware/STM32F4xxESP8266BK/info.txt
2.修改使用者程式的 IAP.C 檔案
提示:我把它們儲存在程式bin檔案的1024位元組倍數的位置是為了BootLoader下載的時候便於提取這些資料;
1.產品型號(我設定的為STM32F4xxESP8266BK)
2.修改韌體程式版本(可隨意指定,我設定的為0.0.2)
3.修改記錄雲端韌體資訊檔案下載地址(我的為:http://mnif.cn/ota/hardware/STM32F4xxESP8266BK/info.txt)
5.修改BootLoader程式的 IAP.c,設定下產品型號和預設的韌體程式下載地址
注意:BootLoader裡面的產品型號要和使用者裡面的要保持一樣!!!!
BootLoader程式下載的時候會判斷這個型號一不一致
6.編譯使用者程式
會在工程目錄的bin資料夾生成 user.bin檔案
7.開啟OTA Tools上位機軟體
8.按照紅框選擇配置
9.選擇使用者程式生成的 bin檔案
10.點選 生成韌體
11.將在user.bin目錄生成user_crc.bin檔案
12,關於user_crc.bin和user.bin的區別
user_crc.bin檔案是在user.bin的基礎上增加了CRC校驗位
還有就是改寫size,把真實的檔案大小填寫到bin檔案
12.把生成的user_crc.bin檔案拷貝到伺服器
13.還差一個info.txt檔案
我準備了一個模板
14.修改版本號(和使用者程式裡面設定的一樣)
16.修改韌體程式下載地址(和伺服器上面的保持一致)
17.最後的提示資訊不需要更改,當前用不到
18.把info.txt檔案也拷貝到伺服器,然後按照一開始的步驟測試即可
小總結
遠端升級微控制器程式其實就是使用模組以TCP方式連線Web伺服器,
然後給TCP伺服器發資料,資料格式是GET指令.
伺服器接收到指令以後會下發檔案給模組,模組通過串列埠把資料發給微控制器,
微控制器接收到資料以後寫到flash,最後載入執行.
關於Flash分配調整
1,首先儲存一些使用者用到的其它資料是使用的我封裝的flash_helper框架
https://www.cnblogs.com/yangfengwu/p/14476294.html
該節例程整體的分配是下面的樣子