關於STM32單片機的IAP實現


 

基於STM32F103單片機的IAP實現(雖然該篇文章不會詳細寫出實現細節,但是會從一個全局的角度講述,實際的實現細節只需根據datasheet即可完成)。

一、基礎概念

      什么是IAPIAP即在應用中編程(In-Application Programming IAP),簡單的說就像是一個用戶自定義的升級程序。實際上,STM32單片機的程序燒寫有多種方法,可以用JTAG,也可用串口通過ISP軟件燒寫新程序。

JTAG的方式需要專用的燒寫工具,在產品布置到現場后,更新產品程序比較麻煩,而通過串口的ISP軟件升級方法可以直接使用常見的串口線升級程序,十分方便,這種方法用的是ISPISP可以說是單片機默認的bootloader

正常情況下,單片機系統啟動后,會直接從用戶程序執行,而升級程序時,單片機會進入bootloader,在ISP中一直運行。ISP雖然方便了升級,但是還是沒法解決用戶自定義和遠程升級的問題。對於用戶來說,有時候可能需要在單片機

flash不同地址燒寫多個應用程序,用於根據不同條件啟動不同應用程序;有時候,產品分布到全國各地,去所有現場升級程序明顯不理智,解決方法是將升級程序放到服務器上,發送遠程升級指令,設備進入IAP升級程序,從遠程

獲取升級應用程序,實現在線升級。

二、IAP實現

1.硬件

STM32單片機的啟動方式有三種,

單片機根據boot0boot1的引腳來確定啟動方式。主閃存存儲器即為用戶程序空間,IAP啟動將會從這里開始,系統存儲器是ISP啟動,內置SRAM不討論。正常情況下,boot0管腳接入低電平,單片機從應用程序開始執行;當使用ISP升級時,boot01boot10,系統進入ISP程序,等待串口升級,升級完成后,需要斷電,改變boot電平,重新啟動,讓單片機從應用程序執行。(所以ISP升級時,還需要關注有關boot腳的電平開關問題。)

IAP升級不需要改變任何管腳電平,因為它實際上就是一個應用程序,只是讓單片機啟動時先執行它,執行完后,跳轉到真正的應用程序執行。

注意:單片機第一次燒寫時,是需要通過JTAGISP燒寫IAP的,如果打算用ISP,那最好留一個boot腳的硬件撥碼開關用於首次ISP升級hex文件。

 

2.軟件

弄清楚硬件之后,就知道什么樣的硬件boot對應什么樣的啟動方式。加入IAP之后,系統啟動時會先執行IAP程序用於判斷是否達到升級條件和執行什么樣的升級配置,相應的邏輯類似於下圖:

 

用戶可以根據自己的需求來設計IAP程序,詳細設計可以參考ST官方資料:               

 《使用STM32F10xxxUSART 實現在應用中編程》,而且官方也給出了例程,資料比較全面,實現起來也很簡單。

最后,提醒注意一點的是,在IAP后面的應用程序都要在系統啟動時重新定義中斷向量表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM