對於大多數基於 flash 的系統而言,在最終產品中安裝之後,能夠對韌體進行更新,這一點非常重要。這一功能被稱為在應用中程式設計 (iap)。stm32f4xx 微控制器能夠執行使用者指定的韌體,從而執行微處理器內建 flash 的 iap。借助這一特性,在重新程式設計過程中可以使用任意型別的通訊協議。
使用所選的開發工具通過 jtag/swd 介面,或使用系統儲存區中工廠內建的自舉程式將iap 驅動程式程式設計到 flash 的基址。使用者程式設定在flash的第二個塊中,並設定中斷向量表偏移量為第乙個flash塊大小。晶元上電後會先執行iap驅動程式,使用者可使用預設的通訊方式,下傳使用者**,iap驅動檢測到**正常後會將其寫入相應flash中,然後跳轉到使用者**區執行使用者**。
注:cortex-m0核心無法通過設定向量表偏移暫存器重對映中斷向量表,需重對映為從ram啟動。
注:用這種方式更新**時,需要直接向flash中寫入二進位制檔案(.bin檔案),可由keil直接生成;由於官方例程中使用的事ymodem傳輸協議,因此需要能夠支援此協議傳輸的超級終端,例如:securecrt。
2)新建iap資料夾,向其中複製st官方例程中的stm32f4xx_an3965_v1.0.0\project\ stm32f4xx_iap目錄下的src和inc資料夾,將main檔案放到user目錄下,刪除stm32相關檔案:
3)工程中刪除多餘檔案,新增新檔案後編譯。
5)mian檔案中,刪除串列埠初始化函式和按鍵相關呼叫; 在bsp_usart中定義eval_com,替換掉工程中的eval_com1,再將bsp_usart.h包含到common.c和main.c中。重新編譯,調整**直到編譯成功。
6)按照啟動檔案修改pendsv_handler和systick_handler函式名。
1)修改target選項卡中rom位置:
2)修改utilities->settings->flash download中flash範圍:
3)user選項卡中新增生成二進位制檔案的指令:
4)修改完成
參考上一節,只多了個main.h。
注:官方例程與當前晶元相容性bug:
1)flash_if.c檔案中,flash_if_init()函式清空標誌位時,無flash_flag_bsy位。
2)庫函式flash_erasepage()檢查引數時,巨集定義的flash範圍不對:
正確範圍: (((address) >= 0x08000000) && ((address) <= 0x0803ffff))
2)重對映啟動位置為從sram啟動(見上圖)。
1)修改target選項卡中rom位置和ram位置(預留中斷向量表空間):
2)修改utilities->settings->flash download中flash範圍和ram範圍:
3)user選項卡中新增生成二進位制檔案的指令:
fromelf.exe --bin -o "[email protected]" "#l"
4)修改完成
STM32 IAP公升級工具
1 內部包含了crc mode的檢驗 2 檔案包含了頭尾 長度的資料,確保公升級操作的可靠性 3 win32串列埠查詢功能getseriallist 4 regkey.open hkey local machine,t hardware devicemap serialcomm key read e...
stm32 IAP程式燒寫方案
1 使用jlink,jtag等 器 這種方式簡單快捷 2 使用系統自帶bootloader,isp,這種方式需要更改stm32boot0 boot1引腳,以更改啟動方式。1 系統上電 2 bootloader引導程式 3 等待10s鍾以等待串列埠傳送程式 4 若串列埠傳送過來程式,此時更新程式 將接...
STM32 IAP公升級 知識點記錄
1.1 書寫程式,keil生成bin檔案 1.2 上位機載入bin檔案,生成校驗碼,通過串列埠,將bin檔案和校驗碼傳送到微控制器 1.3 微控制器接收bin檔案,所有資料存在usart rx buf中 1.4 微控制器程式校驗接收資料是否正確 1.5 程式判斷中斷向量入口是否正確 if vu32 ...