stm32 IAP程序燒寫方案

最近做了一個飛行器,感覺使用jlink仿真器下載更新程序好複雜,每次都需要把一個大塊頭(Jlink)掛到飛行器上,操作極爲不便,網上查了一下,stm32的程序燒寫方式一共有三種

(1)使用Jlink,JTAG等仿真器;這種方式簡單快捷

(2)使用系統自帶bootloader,ISP,這種方式需要更改stm32boot0 boot1引腳,以更改啓動方式。

(3)使用ISP,即 in application programming,這種方式利用stm32的任意一個通訊端口,如spi,iic,can,usart等來更新程序。可以方便快捷的燒寫程序到flash中,前提是要自己編寫加載程序,即bootloader。我的初步計劃是用藍牙+串口來燒寫更新程序。

IAP---》APP模式工作流程分析

(1)系統上電-;

(2)bootloader加載程序;

(3)等待10s鍾以等待串口發送程序

(4)若串口發送過來程序,此時更新程序(將接收到的程序燒寫到指定的flash中),然後在跳轉到正常程序;若無程序更新,則跳轉到正常程序

(5)正常程序接收到串口命令要求reset_cpu,此時stm32復位,運行bootloader,按(2)往下循環執行。



注意事項:

(1)正常程序的flash起始地址需要給一個偏移量

(2)中斷向量表也需要給一個偏移量;這樣才能從中斷向量表中找到中斷服務程序入口地址,第一個執行的程序是Reset_Handler();

(3)系統復位後執行過程:啓動---從中斷向量表取復位中斷入口地址,執行復位中斷服務程序---跳轉到main函數開始執行程序。


補充:昨天在F103上試驗成功後,又開始把程序移植到STM32F405上,無奈flash操作不一樣,lz修改了之後還是不能奏效。後來查到st公司官網上有關於stm32F4系列的iap程序using usart,下載了調試了,程序寫的移植性性很好,但是令我鬱悶的是,使用串口調試工具和secureCRT都無法將bin文件傳輸到下位機,最後發現網上有人講的,必須使用超級終端(HyperTerminal),於是乎下載了一個試了一下,選擇Ymodem,終於出現了期待已久的program succeeded;但是又有一個問題困擾到了我,爲毛app程序沒有按照我的要求來執行?LED燈沒有閃爍,後來發現是中斷在搞怪,也就是說app程序中的中斷開了之後,會有問題,於是我在初始化中不打開中斷,也就是先不使用中斷,結果證明程序工作正常,終於離結果又近了一步!

接下來就是要把中斷向量的問題搞定,讓app程序能夠正常work。 

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

糾結了一陣之後,突然發現,還是app程序的中斷偏移沒有設置好,因爲我的NVIC_SetVector(base,offset)卸載了system_init()函數之前,但是system_init()中又對中斷向量作了初始化,所以我寫的偏移根本沒有起作用!修改回來後,app工作一切正常。

爲了方便大家學習,我把我的資料上傳,包括iap,app,下載工具,說明書,注意事項等內容。

下載地址:http://my.csdn.net/?ref=toolbar

有什麼問題可以聯繫我:qq406124065.希望我們一起學習交流進步。



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