基於ESP8266實現STM32的遠程IAP程序升級(1)

1.1 STM32的程序下載方式

STM32下載程序的方式有以下三種,第一種是在電路編程(ICP)方式,MCU內部不需要有程序,直接上電就能夠進行編程的方式。使用ST-LINK下載器的JTAG/SWD接口屬於這種方式。

第二種方式是在系統編程(ISP),通過設置boot引腳設置對應啓動模式,執行廠家固化的Bootloader程序,來下載程序。使用串口下載程序屬於這種方式。

最後一種方式是在應用中編程(IAP),即允許用戶在現運行程序中,通過任何一種通信接口,將新的程序重新下載到單片機閃存中,實現無需操作硬件平臺的情況下程序的遠程升級

1.2 IAP程序下載流程

(插敘一段基本知識:下載程序是指,將用戶應用程序下載到FLASH中0x08000000地址開始的區域。在ICP下載方式中,如果通過JTAG/SWD協議下載,是將代碼直接下到這一區域;如果通過串口下載,需要配合芯片引腳BOOT0/1,實現單片機從系統存儲器的Bootloader程序【這段程序是原廠固化的】啓動,將串口接收到的程序代碼,引導存儲到FLASH中0x08000000地址開始的區域中去)

對於IAP下載方式的實現,是將一段用戶Bootloader程序寫到FLASH中0x08000000地址開始的區域。注意,這裏的用戶BootLoader程序,不同於原廠固化的BootLoader程序,是用戶可以自我定製的【例如你可以在Bootloader程序中配置好串行通信接口,用於後續接收更新後的應用程序】。

用戶BootLoader程序會實現以下功能:將外部應用程序包通過串口接收起來,寫到FLASH設定好的IAP應用程序存儲區域,寫完之後,又可以從主程序跳轉到應用程序中去執行。

1.3 IAP程序執行流程

(插敘一段基礎知識:一般的程序執行流程如圖1所示,程序從FLASH中0x08000000地址開始,執行復位中斷向量,跳轉到復位中斷程序,再跳轉至main函數入口【這種跳轉邏輯在啓動文件裏面有定義】,主函數處於死循環,若發生中斷請求,STM32的內部硬件機制會自動將PC指針定位到中斷向量表,再跳轉至相應中斷程序入口,執行中斷程序 )
在這裏插入圖片描述加入IAP後,程序執行流程如圖2所示,程序從FLASH中0x08000000地址開始,通過復位中斷,跳轉至IAP程序main函數入口,執行IAP過程【IAP過程是指將用戶程序包通過某種通訊機制寫到FLASH的地址中去】,執行完IAP過程,跳轉至APP程序區域。
APP程序區域同樣有中斷向量表,通過APP復位中斷,跳轉至APP的主函數入口,進入死循環。若發生中斷請求,會先跳轉至原IAP程序的中斷向量表,然後根據IAP與APP程序的偏移量,跳轉至應用中斷程序入口,執行中斷,完後返回應用主程序
在這裏插入圖片描述

1.4 IAP配置流程

對於APP程序,設置好程序的起始地址和存儲空間大小,然後設置好中斷向量表偏移量,通過fromelf.exe生成.bin格式的APP文件,該文件用於後續更新。

對於BootLoader程序,初步嘗試時,直接將例程下載到開發板中即可。

至此,已經可以實現,通過串口將.bin格式的APP文件下載至單片機中了。

上述過程的實現參考正點原子的視頻與例程,不再贅敘。

然而,正點原子的例程僅實現了從IAP至APP程序的跳轉,當我要更新APP程序時,需要在接收到新的APP代碼的後返回IAP代碼塊,重新更新APP固件,如何實現這一需求呢,請看下一文章。

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