STM32 IAP在線升級教學

該篇文章主要講解如何使用SMT32進行在線升級的方法和流程,並不會設計過多具體代碼,之後會製作專門講代碼的視頻。


概述

如何實現在線的固件更新,其實就是在片子中保存一段BootLoader程序和主程序(我叫他APP程序)。正常情況下程序僅僅運行APP程序,當得到命令後,程序將跳轉到BootLoader程序進行新的APP程序更新,完成後跳轉到APP程序運行。呃,好繞,哎無所謂,將就看吧。
BootLoader程序放置在正常程序的開始位置,沒啥講究,但是APP程序就不一樣的,他需要給他規定一個起始位置,所以需要計算好判斷程序的大小來進行設置設置。
SMT32的存儲結構就變爲了 內存 – BootLoader — APP —flash —

BootLoader程序

這個程序主要是用來區分是否需要更新程序,如果是就接收新程序並且寫入flash,如果不是就直接跳轉至APP程序。我將該程序分爲了四個部分

1.判斷

該步驟用於判斷是否需要更新,我的程序裏面使用了0x0800F000這個flash地址作爲標誌位來判斷,地址是隨便選的啦,只要不干擾到APP程序就好。該標識如果是0xFFFF則表示需要更新。修改是在APP程序裏面(咦!我怎麼把它寫到那去了,這個應該寫在BootLoader裏面,在更新結束後更改標誌位)具體在APP程序 一欄會講到。

2.擦除

該步驟用於預先擦除需要寫入的flash程序區域,於是就需要上位機發送一個頁大小,這裏我頂的協議是 FF PAGE AA,PAGE表示頁數。爲什麼要這麼做呢,因爲擦除操作將會耗費大量的時間,如果邊接收數據邊擦除寫入會影響接收數據量,這點筆者糾結了好久才發現爲啥數據量不對 - -||。於是我便先對區域擦除,再邊接收數據邊寫入flash就不會出問題了。頁數也方便確認,上位機在讀取bin文件的時候便能知道大小,除以也大小就得到頁數了。

3.下載

這一步驟就是循環的接收數據寫入flash而已,對了,這裏要提到的是筆者使用的是c8t6系列,是MD的,如果你使用HD的片子需要修改下寫入方式。怎麼弄就自己去學SMT32的flash操作啦。

4.執行

這裏就不得不提到用戶代碼去的第二個地址爲開始地址這個知識咯,具體可以到手冊上去看看,就是說我們需要運行新程序,就得吧指針指向新程序的開始地址,也叫復位地址。至此,程序就跑去運行app程序咯。
我想大家也是覺得一篇文章全是字難受吧,還是貼幾張圖吧 - -
這裏我選用了封裝的IAP類圖和主函數圖。
這裏寫圖片描述
這裏寫圖片描述

APP程序

這個程序也就是我們需要實際執行的程序了。他與我們之前寫的程序不同之處就在於:

1.需要偏移向量表

就是在程序開始加上一句 SCB->VTOR = 0x08000000 | 0x2800;來偏移向量表,當然還是的根據你的BootLoader來寫,這裏的0x2800就是我設置的APP程序rom區域的起始位置

2.需要有軟件復位方法

APP程序當然需要一個能夠更新程序的方法啦,這裏使用軟件復位,並且修改標誌位來讓BootLoader明白這次復位時爲了更新程序的。
提供下STM32軟件復位的代碼 星號((u32 星號)0xE000ED0C) = 0x05fa0004;

3.需要修改ROM範圍

由於前面都擠了一坨程序了,所以APP程序的ROM區域也就不一樣的。貼張圖吧:

這裏寫圖片描述

這裏還需要說下,我們需要的是一個bin文件,不是Hex文件,由於我們是直接指定了地址進行下載的,就不需要下載文件還附帶地址了。額不懂可以搜索bin文件和Hex文件的區別,簡單講就是一個帶了地址,一個沒有。至於如何使用KEIL來生成bin文件了,當然你也可以去搜- -,我貼幾個圖講講吧

這裏寫圖片描述
這裏寫圖片描述
其實圖片說得很清楚了,額。。這個圖是我截取的別人的。就是使用了個keil裏面的工具來生成。在Run右邊的框裏寫的東西有點多,我就發個例子吧
C:\Other\keil5\ARM\ARMCC\bin\fromelf.exe –bin -o E:\study\stm32\procedure\IAP_example\APP\RTE\APP.bin E:\study\stm32\procedure\IAP_example\APP\Objects\App1.axf
額。。。真夠長的,但這是絕對路徑,你也可以寫相對路徑就沒這麼長

流程圖

這裏寫圖片描述

測試

1.首先下載BootLoader程序
2.打開串口調試助手,16進制發送FF 02 AA(由於我的APP程序大小小於兩頁)這是程序會返回please choose file….
3.這裏選擇bin文件發送過去。 程序將返回Data is written to complete…和loading APP….後執行新程序
這裏寫圖片描述
我的APP程序就是不斷髮送。。。
4.對運行中的新程序發送FF AA,這時就會跳轉到BootLoader程序。

相關下載

STM32代碼下載
額,太窮了,收集點幣,之後會提供GitHub連接的

上位機下載程序
這個是百度的連接。。。不要幣 - -

視頻

還沒做,做了會發上來的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章