天天看點

STM32 IAP1、IAP介紹

1、IAP介紹

IAP即“in applicatin programming”在應用程式設計的縮寫,指MCU可以在系統中擷取新代碼并對自己重新程式設計,即改變應用程式。它與我們所熟悉的ISP程式設計不同,STM32F103的ISP程式設計接口為序列槽1,如果使用其他的序列槽或其他總線則不能對其進行程式設計。而我們這裡所說的IAP通過下載下傳一段引導程式Bootloader程式,如果我們想要從序列槽2或網口更新應用程式,在Bootloader中初始化相應的序列槽或網口,使其接收應用程式,将接收到的應用程式寫入到Flash裡面,IAP完成後跳轉到應用程式入口執行應用程式。是以現在的IAP程式涉及到兩個概念:Bootloader和應用程式。

Bootloader:BootLoader就是在作業系統核心運作之前運作的一段小程式。通過這段小程式,我們可以初始化硬體裝置、建立記憶體空間映射圖,進而将系統的軟硬體環境帶到一個合适狀态,以便為最終調用作業系統核心準備好正确的環境。這裡我們所說的Bootloader也是系統開機前的一段小程式,其主要任務是用來初始化序列槽和IAP端口(網口CAN接口等)的,通過判斷狀态是否需要從IAP端口進行更新應用程式,若需要更新則從端口接收應用程式,并存放到指定的Flash裡面,更新完成後則跳入到指定的Flash裡面執行應用程式。

應用程式:即我們需要開發闆實作功能的程式,其中應用程式主要分為兩種:hex檔案和bin檔案。在我們經常使用的KEIL中預設編譯生成的可執行檔案(應用程式)為hex格式的,若需要編譯生成bin格式需要做如下修改,加入“D:\Keil\ARM\ARMCC\bin\fromelf.exe --bin --output ./Obj/Can_Updata.bin ./Obj/test.axf”,重新編譯生成的Can_Updata.bin檔案存放在Obj檔案夾下。

STM32 IAP1、IAP介紹

2、bin格式檔案與hex格式檔案的差別

bin格式檔案是純粹的二進制檔案,使用下載下傳其将其下載下傳到開發闆時其内容完全不變,是以對于IAP下載下傳使用bin格式檔案是比較友善的,如下圖是bin檔案的内容與寫入到開發闆後使用仿真器觀察到Flash存放的内容(這段程式當然是可以執行的)。

STM32 IAP1、IAP介紹
STM32 IAP1、IAP介紹

 Hex格式檔案:Hex全稱(Intel HEX)檔案是由一行行符合Intel HEX檔案格式的文本所構成的ASCII文本檔案。在Intel HEX檔案中,每一行包含一個HEX記錄。這些記錄由對應機器語言碼和/或常量資料的十六進制編碼數字組成。如下圖是hex檔案的部分資料,其組成由“:CCAAAARR...ZZ ”,CC=10代表長度為16位元組,AAAA=0000本條記錄中的資料在存儲區中的起始位址,RR=00,資料區,ZZ=38為校驗,這裡就不做仔細說明了。

STM32 IAP1、IAP介紹

3、stm32 IAP原理

stm32有多種啟動方式,其中boot0=0、boot1=x,是我們最常用的即從系統存儲器啟動,位址0x800 0000,如下圖是stm32正常的啟動流程圖,stm32上電開機後進入0x800 0000開始執行程式,運作到複位中斷0x800 0004後跳轉應用程式入口0x800 0004+n後一直循環,當程式發生中斷時,STM32的内部硬體機制亦會自動将PC指針定位到“中斷向量表”處,并根據中斷源取出對應的中斷向量執行中斷服務程式。具體啟動說明可以參考http://www.amobbs.com/thread-5267466-1-1.html(出處: amoBBS阿莫電子論壇)。

STM32 IAP1、IAP介紹

如下圖是下載下傳Bootloader程式後的執行流程,程式複位後進入0x8000004處取出複位中斷向量的位址,并跳轉執行複位中斷服務程式,進入Boot程式段,在Boot程式中通過判斷某個标志是否需要進行更新應用程式,若标志位置位則進行更新,在我們之後使用的标志中利用stm32的後備寄存器來判斷是否進行更新,若更新完成或不需要更新則直接跳轉到新的中斷向量表的起始位址開始執行應用程式。當程式産生中斷時,PC指針指向0x800 0004,随後跳轉到新中斷向量表的偏移位址并執行新的中斷程式,執行完成後傳回到應用程式。

STM32 IAP1、IAP介紹

繼續閱讀