Stm32 IAP程序编写及用户程序编写
Stm32f10x系列MCU Bootloader?流程
芯片:stm32f103ze
所需軟件:SecureCRT?(用于使用Ymode協(xié)議發(fā)送Application文件),其實(shí)應(yīng)該我們自己寫個(gè)上位機(jī),這里借助SecureCRT來充當(dāng)我們自己寫的應(yīng)用程序(用于驗(yàn)證Bootloader是否成功)。
keil版本:μVision V5.11.0.0
用途:使用通信接口用于軟件的更新(免去拆機(jī)繁瑣的流程)。
BootLoader其實(shí)看上去挺復(fù)雜的樣子,但也還好~仔細(xì)查找網(wǎng)上的資料都
有很多介紹,以下為自己做bootloader的過程以及應(yīng)注意的事項(xiàng),幫助
大家少走彎路~
請(qǐng)先下載我上傳的資源:?
http://download.csdn.net/detail/jimoxiaosage/9451290
首先確定自己要做個(gè)串口能更新固件的程序出來~,聽說名字叫Bootloader,網(wǎng)上也是挺多資料,網(wǎng)上資料找了找,看了看基本了解其流程:
在程序起始位置(0x0800 0000)寫B(tài)ootloader程序,在另一個(gè)偏移位置寫應(yīng)用程序(比如0x0800 3000,那么bootloader?的程序空間就只能被限定為0x3000大小,超出了就不行咯)。在Bootloader程序中通過檢測標(biāo)志位(按鍵按下,或是Flash中的數(shù)據(jù)等等)來判斷是否進(jìn)行更新。(此處的更新指的是更新用戶應(yīng)用程序區(qū)域,即0x0800 3000?之后的flash?數(shù)據(jù))通過串口,使用Ymodem協(xié)議將要更新的鏡像--xxx.bin燒寫入Flash,燒寫完成后程序跳轉(zhuǎn)到應(yīng)用程序(0x0800 3000?),固件更新完成。
?
BootLoader工程Stm32官網(wǎng)上有,當(dāng)然也可以使用我的(有簡單修改過):
在這個(gè)工程中需要注意的地方:
1.用戶程序起始地址:#define ApplicationAddress????0x8003000?。(該地址需要與另一個(gè)工程-用戶應(yīng)用程序的起始地址一樣,具體看后面)。
2.需要配置燒寫時(shí)擦除的位置,如圖:
?
?
?
3.默認(rèn)程序地址就是0x8000 0000?,大小需要修改為0x3000,如下圖:
?
?
?
4.注意串口是否可用,該工程串口引腳PA9,PA10,特別注意時(shí)鐘是否配置正確(主頻72M)否則會(huì)出現(xiàn)亂碼~~~。
5.附帶我修改過的程序流程圖,按鍵就是PA0,
?
//-----------------------------------?以上?BootLoader?做好了-----------------------------------
下面就需要寫個(gè)應(yīng)用程序來驗(yàn)證該BootLoader~~
如下是我的工程需要注意的地方:
1.修改keil配置,將起始地址修改為?0x0800 3000,大小根據(jù)自己的flash大小來設(shè)定,如圖:
?
?
2.同樣要擦除的Flash區(qū)域也要勾選下(不然debug時(shí)會(huì)把本來寫進(jìn)去的Bootloader擦掉了~)如圖:
?
?
?
?
3.由于我們將程序起始地址改成了0x0800 3000,復(fù)位時(shí)其實(shí)仍然是從0x0800 0000開始跑的~所以要在main函數(shù)最前面加:NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x3000); 同時(shí),還需要修改如下定義的值:
#define VECT_TAB_OFFSET??????????????????0x3000
改值原本為0,修改為偏移量。
4.使用keil自帶的fromelf?來輸出***.bin文件~,這部分網(wǎng)上找的挺多都不能用的,可能跟keil軟件版本有關(guān)吧,詳細(xì)問題還是查看keil幫助文檔會(huì)比較清楚,以下貼上我的設(shè)置:
?
?
fromelf --bin --output=1s.bin ..\OutPut\Stm32f103Templete.axf
,這樣編譯完成就會(huì)出現(xiàn)一個(gè)1s.bin的文件咯~
簡單看下我的main函數(shù)~實(shí)際就是個(gè)閃燈的程序~(可以把時(shí)間修改為500ms,再生成一個(gè)500ms.bin文件來驗(yàn)證我們的Bootloader)
//--------------------------------?以上為用戶應(yīng)用程序部分------------------------------
以上步驟結(jié)束后我們會(huì)有:
1.Stm3210xIAP???(Bootloader)
2.Stm3210xIapApplication?(user application)
3.1s.bin???500ms.bin
4.SecureCRT軟件
首先先把1的工程編譯,燒到芯片中~,接下來把2的工程編譯燒到芯片中~此時(shí)如果PA2接個(gè)LED燈會(huì)看到燈交替閃爍。
接著打開SecureCRT軟件,設(shè)置好相應(yīng)波特率,打開串口~,
接著PA0接到地(模擬一個(gè)按鍵按下)再將開發(fā)板上電,此時(shí)就會(huì)進(jìn)入固件升級(jí),打印相關(guān)信息~此時(shí)芯片等待Ymodem協(xié)議發(fā)送文件過來,使用secureCRT軟件,send Ymodem,選中我們所需要更新的文件如:1s.bin,燒寫完成后會(huì)發(fā)現(xiàn)LED燈變成每1s交替閃爍了。
可以重復(fù)以上過程燒寫500ms.bin文件試試~。
?
以上整個(gè)過程結(jié)束。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Stm32 IAP程序编写及用户程序编写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32 IAP在线升级的个人经验以及
- 下一篇: 蓝牙4.0BLE抓包(二) – 广播包解