STM32的IAP應用 - LIU_XF

山西快乐十分任三口诀 www.jucocx.com.cn 發布時間:2017/6/1

STM32支持在應用中編程,也就是所謂的IAP,這對產品的在線升級帶來了很大方便。

在線升級的原理簡介如下:

在單片機的FLASH中有兩段代碼,一段是IAP代碼,另一段就是用戶的應用程序即APP代碼,IAP代碼放在單片機復位時的起始地址,而APP代碼則放在IAP后面的地址,上電時CPU首先執行IAP代碼,再通過IAP代碼跳轉到APP代碼開始執行。

在IAP代碼執行期間,通過檢測某一個事件(如IO電平)來判斷是否對APP代碼進行更新,如果該事件無效,則不更新,直接跳轉到APP代碼執行;如果該事件有效,則更新APP代碼,而更新的文件則從外部磁盤通過串口或USB寫入FALSH應用程序空間。

流程圖如下:

當然,這只是一種最簡單的方式,它還可以是當APP代碼在執行時,將PC指針跳轉到IAP來更新自已。

實現的大致原理都是一致的,只是方式不同罷了。

值得注意的是:

IAP跳轉的地址必須APP的起始地址一致,相應的中斷向量表也要修改,否則APP將不能正確的運行。

在附件我整理的代碼中,串口方式的IAP跳轉的地址為0x8002000,因此應用程序的起始地址也應為0x8002000,在KEIL設置下如下圖:

還有中斷向量表的起始地址也應改為0x8002000:

/* Set the Vector Table base address at 0x08002000 */

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);  // NVIC_VectTab_FLASH=0x08000000

只有以上兩處設置正確才能確保APP能正確的運行。

USB方式的IAP跳轉的地址為0x8004000,設置方法同上。

升級文件傳輸方式

串口方式的IAP在超級終端下用Ymode協議,波特率115200;文件為.BIN格式。

USB方式的IAP用DfuSe USB Device Firmware Upgrade軟件傳送,文件為dfu格式。

總的來說,IAP帶給我的體驗還是非常愉快的!