STM32實現IAP程式公升級

2021-10-17 20:37:42 字數 1481 閱讀 1370

1.寫在前面

對於stm32來說,晶元出廠時已經預置了一段bootloader,但是啟動bootloader需要設定微控制器的boot引腳:boot1=0,boot0=1,並復位後才能進入系統bootloader。boot引腳的設定可通過硬體來實現自動設定和復位,從而利用系統bootloader實現iap。電路圖如下:

電路比較簡單就不詳細分析了。程式公升級需要配合專用的軟體mcuisp。公升級時mcuisp軟體會控制dtr引腳和rts引腳將boot0引腳拉高,並實現微控制器復位,從而進入系統bootloader。之後可以通過usb轉串列埠對程式進行公升級。

3.自己編寫bootloader

系統bootloader只能通過特定的介面對程式進行公升級,且會增加額外的硬體設計,有時候並不適用。這時候就需要自己編寫bootloader程式實現iap。

實現iap需要兩個程式:bootloader程式和應用程式。系統啟動後首先進入bootloader程式,判斷是否需要公升級,如果不需要直接跳轉到應用程式執行;如果需要則通過指定的介面和協議接收資料並寫入到flash中,實現應用公升級。這種方式靈活很多,介面和協議都可以自定義,實現的關鍵是協議的設計和對flash進行讀寫。這裡以stm32f1系列微控制器為例,採用串列埠1和通用的ymodem協議進行介紹。

ymodem協議

ymodem協議是乙個非常高效的檔案傳輸協議,每包資料可以達到1024位元組。ymodem協議傳輸的完整的握手過程如下。這裡就不進行詳細介紹了,使用者也可以採用自定義的協議,協議設計要主要傳送、反饋和校驗,保證傳輸資料的正確性。

bootloader程式很多時候,使用者的硬體上可能沒有按鍵,則需要通過其它辦法來實現判斷。比如,需要公升級時,應用程式在flash某個位置寫入乙個標誌,然後復位進入bootloader程式,bootloader程式讀取該標誌來自動判斷是否需要公升級應用程式。

應用程式在應用程式中system_stm32f10x.c檔案,找到:

該位址為偏移位址,不是絕對位址,與上面的位址有區別。

最後,mdk預設只生成hex檔案,要生成bin檔案需要新增一條指令。在user選項卡中,勾選 「run # 1」,在後面輸入框寫入bin檔案生成方式:

$k\arm\armcc\bin\fromelf.exe --bin [email protected] !l

上位機
上位機採用securecrt,該軟體支援ymodem協議。開啟軟體後,連線串列埠,使電路板進入bootloader程式,根據選單進行操作即可。

採用其它方式和協議進行iap公升級的方法將在以後的文章中繼續介紹。

STM32的IAP韌體公升級

an2606 system memory boot mode an3155 usart for bootloader 指令集詳解 an2557 iap using usart 將0x08000000開始的main memory空間劃分為兩部分,其中低位址空間用於儲存iap driver,剩餘空間用於...

IAP公升級日記(STM32晶元)

就是我們的使用者區程式 以我使用的stm32f030cct6為例,其有256kb的flash記憶體空間,m0的核心,其記憶體對映圖如下 從圖中可以看出 該mcu的主flash位址是從0x08000000處開始,又因該款mcu的flash大小為256kb,所以該款mcu的位址區間為0x08000000...

stm32 利用iap更新程式

在官方軟體庫的 core cm3.h 檔案裡 直接提供了 系統復位的函式void softreset void 方式一 stm32 ram足夠大的情況下使用ram來快取新的程式 一般程式的bin檔案大小只有幾十k 第一步自定義乙個協議 例 第二步 接收到進入boot程式命令即呼叫softreset軟...