stm32 IAP 實現(xiàn)
在上一篇筆記中,進行了一個簡單的IAP程序結構,以及和User App程序的相互聯(lián)系的系統(tǒng)設計。
本文引用地址:http://m.butianyuan.cn/article/201611/316280.htm本篇對IAP實現(xiàn)的細節(jié)進行了較為詳細的論述,包括源碼結構的設計;我們從上位機(PC—C#)和下位機(MCU—C)共同描述IAP功能的實現(xiàn)過程。
1 STM32的IAP實現(xiàn)平臺
IAP功能的實現(xiàn)需要兩個方面(上位機和STM32上的IAP程序)的密切合作。因此,我們除了需要知道STM32芯片上的IAP程序結構,我們還需要了解上位機的程序結構,這樣才能使上位機和STM32很好的相互工作。
下位機(指的是STM32構成的單片機系統(tǒng)):
本下位機系統(tǒng)使用C語言進行編程,項目功能是實現(xiàn)IAP(In Application Programming);
下位機使用IAR Embedded Workbench for ARM 6.10 Kick start開發(fā)環(huán)境;
使用STM32F103C8-PKT開發(fā)板進行調試和驗證;
上位機(指的是PC構成的PC系統(tǒng)):
本上位機系統(tǒng)使用C#語言進行編程,項目功能是配合下位機實現(xiàn)IAP;
上位機使用Visual Studio 2008開發(fā)環(huán)境;
使用一般的PC機進行調試和驗證;
上位機和下位機通訊(串口通訊):
上下位機之間通過串口進行通訊;
上位及通訊一定的通訊協(xié)議將需要更新的程序通過串口傳輸給IAP程序,再由IAP程序將數(shù)據(jù)寫到用戶的Flash區(qū)域;從而達到IAP功能,如圖所示:
2 STM32和上位機的通訊協(xié)議
如何將更新程序的bin文件數(shù)據(jù)傳輸?shù)絊TM32系統(tǒng)內部?
如何將串口接收到的一連串數(shù)據(jù)給解析出來,進行有效數(shù)據(jù)的寫Flash?
如何得知數(shù)據(jù)傳輸?shù)拈_始?
又如何得知數(shù)據(jù)傳輸?shù)慕Y束?
……
以上的種種疑惑,都是我們必須要關心的問題;而這些問題都隱藏著一樣的本質——如何獲取PC端有用的信息?
對于如何獲取有用信息,有幾個問題需要考慮:
通過何種方式獲取?——我們采用USART;
何種數(shù)據(jù)才是有用的?——我們指定一個簡單的協(xié)議;
又是如何實現(xiàn)IAP程序和APP程序的切換的;
在硬件上,USART的實現(xiàn)較為簡單;我們重點在于協(xié)議的設計和理解;
3 STM32—IAP程序的實現(xiàn)
1、IAP通過USART和上位機通訊,實現(xiàn)數(shù)據(jù)的下發(fā)和在應用編程;如圖:
2、上位機和STM32系統(tǒng)USART之間通過一個簡單的協(xié)議進行連接;
當連續(xù)收到4次0xBB后,表示開始接收用戶代碼;
當連續(xù)收到4次0xEE后,表示結束接收用戶代碼;如圖:
3、IAP程序位于Flash啟動的起始地點,判斷相應標志,是更新程序,或是運行用戶程序;IAP程序更新之后,設定標志,跳轉到用戶程序區(qū)去,完成IAP,實現(xiàn)新的用戶功能;如圖:
4 STM32—上位機程序的實現(xiàn)
如圖,為一個簡單的上位機界面:
上位機主要分為兩個部分:
1、串口配置部分:
選擇端口、波特率,和數(shù)據(jù)類型,點擊USART Open按鈕;
2、串口通訊部分:
通訊部分,可以通過三步進行一次IAP功能的實現(xiàn);
A、發(fā)送起始字節(jié)——0xBBBBBBBB
B、發(fā)送用戶代碼——通過轉換Hex文件獲取
C、發(fā)送結束字節(jié)——0xEEEEEEEE
5上位機和STM32實現(xiàn)IAP功能的注意
1、上位機和STM32系統(tǒng)需要有相對應符合的通訊協(xié)議;
2、上位機和STM32系統(tǒng)的設計,要考慮到程序處理時間;防止時間的因素而無法響應;
3、為提高可靠性和安全性,需要設計更為友好的通訊協(xié)議;
至此,關于《STM32實現(xiàn)IAP(上位機和IAP程序設計)》知識已經結束;
至此,關于STM32存儲器知識等三篇筆記都已經結束。
完成STM32存儲器知識過程中,一共參考了以下官方文檔:
《RM0008 Reference manual》
《Cortex-M3技術參考手冊》
《PM0042 Programming manual:STM32F10xxx Flash programming》
《AN2557 Application note:STM32F10x in-application programming using the USART》
等等;
另外也參考了很多無私網(wǎng)友的奉獻,在此感謝。
關于我的STM32存儲器知識共有三篇文章,分別是:
《stm32的存儲器》
《STM32存儲器知識的相關應用(IAP、Bit Banding)》
《STM32實現(xiàn)IAP(上位機和IAP程序設計)》
評論