STM32F10x的IAP在線升級功能非常實用——不必拆開設備的外殼,然后通過JLINK或是其它工具燒錄程序。而是僅通過設備上的串口、USB或是CAN,即可完成程序的更新,實現固件升級。
整個過程用到兩個程序,一個IAP程序,它用來實現通過串口下載用戶程序。另一個就是用戶應用程序了。
通過串口實現在線升級的原理如下:
1、首先通過JLINK或其它工具將IAP程序下載至STM32的FLASH中,其占據的地址空間為0x800 0000到0x8002fff,這段空間用來存放IAP程序,IAP代碼大小不能超過(0x800 2fff - 0x800 0000 =12K)。
2、打開“超級終端”,按照IAP程序里設置的參數(波特率、數據長度、校驗位等),對“超級終端”作相應設置。
3、將設備斷電,按住設備上的某一開關或是按鍵(這個可以在IAP程序里自已定義,下文有敘述)。然后給設備上電,這時“超級終端”上會顯示操作界面,讓用戶選擇:1、給STM32下載新的用戶程序;2、將STM32內現存的用戶程序上傳至電腦;3、運行新下載的用戶程序。出現這個界面后,就可以松開開關或是按鍵了。
4、通過電腦鍵盤上的“1”、“2”、“3”這幾個數字鍵選擇你想執行的操作。若是希望下載,按下數字鍵“1”.接下來電腦屏幕上會彈出對話框,讓你選擇希望下載的二進制文件,以及傳輸協議,這個得選“Ymodem”協議。完成后按“確定”就開始下載了。
再來看一下兩個源程序里,用戶根據自己的需要可能得改動的地方。
an2557.zip里面就是IAP程序。
這個程序里面,用戶可能要改動的就是IAP的觸發方式,即如何進入IAP來進行新的用戶程序的下載。該源程序里定義的是一個連接至PB9的按鍵,當設備剛上電的時候,如果該按鍵按下,則進入IAP模式,否則跳至0x8003000運行用戶程序。如何觸發IAP,用戶可以根據自己的實際情況,自行定義。另外,這里面初始化了一個串口,即用來和PC通信的串口,波特率、數據長度、校驗位等,也是這里設置的。
再來看用用戶應用程序里需要改動兩個的地方。
1、將中斷向量表映射至0x8003000處。在main函數里,待系統初始化后,可以通過這條語句即可實現:
NVIC_SetVectorTable(0x08000000,0x00003000);
2、將用戶應用程序的起始地址設置為0x8003000,在keil4中如下圖所示:

另外請注意,在線升級時只能選擇BIN格式的二進制文件,可以通過H-JTAG里面的Convert工具,將Keil編譯生成的HEX文件轉換成BIN文件。
以上就是通過串口實現STM32IAP在線升級的原理及過程。
若有不清楚的地方請看an2557:STM32F10x in-application programming using theUSART 這個PDF文檔,里面有詳細的說明。
an2557 ApplicationNote.pdf下載地址:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/application_note/CD00161640.pdf
an2557.zip下載地址:(IAP源代碼)http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware/stsw-stm32008.zip
|