上節實現遠程更新是更新的STM32F103C8T6的單片機html
這節將告訴你們如何移植到其它型號的單片機.緩存
這一節以 STM32F103RET6 (512KB Flash 64KB RAM) 爲例 服務器
我使用個人這塊板子
網絡
你們測試的時候能夠按照下面的方式接到本身的GPRS模塊(Air202 / SIM800)測試
單片機串口1 接到GPRS的AT指令配置串口spa
單片機引腳PB2 接到GPRS的復位引腳3d
一,因爲是移植的F103系列因此BootLoader程序咱能夠不用移植,直接先拷貝過去htm
二,調整下Flash的分配blog
2.1 本身自行調整哈,不過要注意最好設置成2的倍數由於512KB的Flash單片機都是以2KB做爲一頁隊列
三,其它你們應該知道的配置(如下根據本身使用的芯片選擇)
四,編譯下載,看下打印的信息
user1ROMStart: 0x8004000 //用戶程序1開始的地址
user1ROMSize : 0x3d000 //用戶程序1大小 249856字節 == 244KB
user2ROMStart: 0x8041000 //用戶程序2開始的地址
user2ROMSize : 0x3d000 //用戶程序2大小 249856字節 == 244KB
五,當前Flash分配
六,而後呢,還有一點,你們能夠修改一個地方.這個是預留的,方便不一樣的用戶
6.1 在BootLoader裏面呢,其實每隔30S訪問一下升級,不過是受升級標誌限制的
6.2 經過上面的章節咱知道在BootLoader裏面想操做升級,須要按下PB5等待3S指示燈快閃之後,寫入升級標誌重啓,而後實現的升級
若是運行在BootLoader裏面超過30S其實就說明沒有用戶程序可執行(或者在升級中)
我如今但願只要是運行在BootLoader裏面超過30S,就主動訪問升級去吧!讓芯片主動一點
因此作如下更改
七,最後呢!修改下訪問的http路徑
一,假設用戶程序是什麼也沒有的,我如下面的做爲用戶程序的底層
二,打開那個程序,首先咱弄的簡潔點,這個程序就是控制PC13 500Ms亮 500Ms滅,其它功能就不作了
咱遠程更新的時候只要發現PC13 500Ms亮 500Ms滅就說明更新進去了
三,拷貝BootLoader裏面的stmflash 到咱當前工程
四,而後呢須要拷貝IAP文件(能夠拷貝BootLoader裏面的,也能夠拷貝上幾節用戶程序裏面的)
建議拷貝上幾節用戶程序裏面的IAP文件,由於上幾節用戶程序裏面的IAP相對於BootLoader裏面的作了不少裁剪(省內存)
無所謂哈,拷貝哪一個都同樣用,裏面全部的操做都同樣,只不過BootLoader裏面的IAP文件比較龐大點,佔用內存大點
五,整理下工程
六,添加上處理升級部分
6.1 獲取更新的狀態,爲了簡潔了當我就直接拷貝源碼
6.2 我是從原先用戶程序的這裏拷貝的
6.2 處理更新狀態
這個處理狀態主要就是用來清零升級的狀態.
6.3 源碼位置
一,配置用戶程序1
1.1,還記得上面打印的不
1.2,配置用戶程序1
1.3 配置下生成的用戶程序1的bin文件名字 我設置的是 Progect.bin
二,配置用戶程序2
2.1 拷貝出來一份用戶程序
2.2 打開STM32F10xTemplate - 副本程序,首先把基本配置先檢查一遍
\
2.2 打開STM32F10xTemplate - 副本程序,配置生成bin文件
2.3 配置下生成的用戶程序2的bin文件名字 我設置的是 Progect2.bin
一,拷貝記錄設備版本的updatainfo.txt文件,和用戶程序1文件(Progect.bin),用戶程序2文件(Progect2.bin)到服務器
最終效果
二,下載BootLoader程序
三,等待大約30S
3.1 我監控的數據 你們會發現執行了用戶程序,可是會每隔5S重啓
3.2 其實忘了告訴你們一講事情了,BootLoader 裏面的程序配置,對用戶程序一樣有效,因此用戶程序須要有喂狗程序
能夠本身加上喂狗程序之後,你們從新測試.
該程序代碼能夠比較方便的移植到F103全系列的型號上.
其實你們沒必要急於弄懂個人程序,由於這套升級程序我測試了不少不少次,作了很長時間,最終總結成如今的
若是不明白流程,能夠問我哈.
其實不管再怎麼變,本質改變不了,環形隊列緩存數據,寫入Flash,啓動運行.
其它的皆是爲了穩定性而作的配合性程序