STM32F103系列微控制器在應(yīng)用編程技術(shù)研究
該方案是在主程序前添加一個(gè)簡(jiǎn)單的Bootloader程序,用該程序來判斷是否進(jìn)行軟件更新。Bootloader程序的主要編程思路如圖4所示。
該方案的原理是:STM32F103芯片啟動(dòng)時(shí)將從FLASH的0x8000000地址開始執(zhí)行程序,Bootloader程序也要寫在地址0x8000000處,在Boot loader程序中通過判斷標(biāo)志位的值來判斷是否直接進(jìn)入主函數(shù),判斷標(biāo)志位的值存放在STM32F103的FLASH中避免標(biāo)志位丟失。主程序的位置在Bootloader程序所占用的地址空間之后,具體地址要由Bootloader程序的大小來決定。
更新主程序的過程就是將以前的主程序覆蓋掉。Bootloader程序、主程序以及更新標(biāo)志位的地址位置及加入Bootloader程序后,主程序的中斷工作過程如圖5所示。
Bootloader程序被放在芯片啟動(dòng)后讀取的第一個(gè)地址0x8000000上,依次按照地址排下來是Bootloader的中斷向量表、Bootloader的主程序。在IAP主程序之后0x8000000+X處放置更新標(biāo)志位temp。在更新標(biāo)志位后0x8000000+X+M處地址開始主程序。
主程序的中斷響應(yīng)過程為:中斷發(fā)出中斷請(qǐng)求,中斷請(qǐng)求根據(jù)STM32F103的硬件機(jī)制會(huì)到0x8000000后的中斷向量表進(jìn)行中斷的響應(yīng),但主程序有自己的中斷向量表,所以在主程序的main()函數(shù)開始時(shí)要偏移中斷向量表,使中斷響應(yīng)時(shí)按照主程序的中斷向量表進(jìn)行。
由上述分析可以得出編寫主程序的三個(gè)注意事項(xiàng):
首先,在主程序編譯前需要先將程序的啟動(dòng)地址設(shè)置為Bootloader寫入的地址,例如在RVMDK軟件中設(shè)置芯片的啟動(dòng)地址為0x8000000,但主程序?qū)懺?x8004000的位置,所以需要將主程序的啟動(dòng)地址改為0x8004000。
其次,就是在main()函數(shù)中設(shè)置偏移中斷向量表,如下面的程序所示,在主程序開始時(shí)偏移中斷向量表。
最后,使用IAP下載的更新程序的格式最好為.bin文件,但不能是.hex文件,可以使用fromelf這一類的工具將.hex格式文件轉(zhuǎn)換為.bin文件。
3 藍(lán)牙串口模塊完成的無線IAP方案
該方案主要由圖6所示的幾個(gè)部分組成,STM32F103的其中一個(gè)串口與藍(lán)牙串口模塊相連接。藍(lán)牙串口模塊支持SPP藍(lán)牙串口通信協(xié)議,即使用藍(lán)牙替代串口線,通過無線的方式進(jìn)行串口通信。上位機(jī)是一臺(tái)PC機(jī),負(fù)責(zé)給嵌入式產(chǎn)品下載更新軟件,PC機(jī)需要通過一個(gè)藍(lán)牙適配器與嵌入式產(chǎn)品的藍(lán)牙串口模塊進(jìn)行藍(lán)牙數(shù)據(jù)傳輸。
評(píng)論