1. 程式人生 > >STM32F103 程式碼遠端升級(一)初識IAP程式設計

STM32F103 程式碼遠端升級(一)初識IAP程式設計

一、IAP是什麼

IAP即為In Application Programming,解釋為在應用中程式設計,使用者自己的程式在執行過程中對User Flash的部分割槽域進行燒寫。即是一種對微控制器flash擦寫的一種程式設計方案。 通常情況下,一片stm32微控制器的flash只有一個使用者程式,而IAP程式設計則是將微控制器的flash分成至少兩大區域,一部分叫做bootloader區,一部分叫做app使用者程式碼區,還可留出一部分割槽域為程式碼備份區。

二、IAP的應用場所

通常情況下我們給stm32微控制器燒錄更新程式時是通過SWD、J-link或者通過設定BOOT引腳後,使用串列埠進行程式下載,這樣的方式直接一次性將程式檔案下載到微控制器的flash中,比較適合絕大部分的應用。 但是當產品投入實際應用時,封裝完成後在後期的使用過程中遇到某些程式上的bug或者是根據客戶需求需要增加一些功能的時候,使用傳統程式碼燒錄的方法就可能需要拆除封裝,而使用IAP程式設計在bootloader區提前寫入與外部通訊的介面用於升級微控制器程式碼,使得我們不用對已完成包裝的產品進行拆除既可以更新程式碼,這樣既節約了成本,也更加方便快捷。

三、IAP程式設計的流程

IAP程式設計將Flash區分成的兩個區域,bootloader區和app使用者程式碼區具有截然不同的功能。 bootloader區,主要實現接收程式檔案,並將該程式寫於特定位置的Flash區域。而這裡接收外部程式檔案,就需要實時和外部通訊了。Stm32微控制器與外部通訊大多是通過自身的串列埠接收和傳送資料,不過Stm32微控制器的串列埠可以外接多種通訊介面,例如422、485、GPRS及ESP8266等。即我們可以通過串列埠外接藍芽模組、WiFi模組或者是其他網路模組,就可以實現遠端的檔案傳送更新微控制器程式了。 app使用者程式碼區則是主要實現我們所需要的功能操作,除此之外app使用者程式碼區還需要實時檢查程式碼執行情況,通過判斷更新程式的標誌位來判斷是否需要升級程式。若是需要升級程式則進入bootloader區進行程式碼更新;若不需要則繼續執行功能函式程式碼即可。 因此IAP程式設計下的微控制器執行流程如下圖: IAP程式設計下微控制器執行流程圖

根據執行流程,我們可以總結出簡單幾條bootloader設計過程中需要注意的地方: 1、精簡、程式儘可能精簡。在微控制器Flash有限的情況下,bootloader程式碼佔用Flash的空間越小,則APP程式程式碼就可佔用更多,實現更多功能函式。 2、標誌位不受復位的影響。 3、Bootloader中儘量不使用中斷。

四、寫在末尾的話

因為專案上需要,提出了遠端升級微控制器程式的要求,所以才開始接觸到IAP程式設計。在弄清楚了原理和流程之後,我就開始著手實現這一功能,寫此係列文章主要是為了留個筆記方便以後檢視。文中的內容也多是我通過學習加上自身的理解寫的,所以若有不妥之處,歡迎大家指出,共同進步。 後續文章主要是圍繞Stm32F103微控制器串列埠更新程式的具體操作,涉及的通訊協議有Xmodem、Ymodem及MQTT;涉及的程式語言有C、Lua。

參考連結