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