<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > stm32 IAP 實(shí)現

stm32 IAP 實(shí)現

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò ) 收藏
在對STM32存儲器結構及相關(guān)知識了解后,我們就可以進(jìn)行IAP的設計了。

在上一篇筆記中,進(jìn)行了一個(gè)簡(jiǎn)單的IAP程序結構,以及和User App程序的相互聯(lián)系的系統設計。

本文引用地址:http://dyxdggzs.com/article/201611/316280.htm

本篇對IAP實(shí)現的細節進(jìn)行了較為詳細的論述,包括源碼結構的設計;我們從上位機(PC—C#)和下位機(MCU—C)共同描述IAP功能的實(shí)現過(guò)程。

1 STM32的IAP實(shí)現平臺

IAP功能的實(shí)現需要兩個(gè)方面(上位機和STM32上的IAP程序)的密切合作。因此,我們除了需要知道STM32芯片上的IAP程序結構,我們還需要了解上位機的程序結構,這樣才能使上位機和STM32很好的相互工作。

下位機(指的是STM32構成的單片機系統):

本下位機系統使用C語(yǔ)言進(jìn)行編程,項目功能是實(shí)現IAP(In Application Programming);

下位機使用IAR Embedded Workbench for ARM 6.10 Kick start開(kāi)發(fā)環(huán)境;

使用STM32F103C8-PKT開(kāi)發(fā)板進(jìn)行調試和驗證;

上位機(指的是PC構成的PC系統):

本上位機系統使用C#語(yǔ)言進(jìn)行編程,項目功能是配合下位機實(shí)現IAP;

上位機使用Visual Studio 2008開(kāi)發(fā)環(huán)境;

使用一般的PC機進(jìn)行調試和驗證;

上位機和下位機通訊(串口通訊):

上下位機之間通過(guò)串口進(jìn)行通訊;

上位及通訊一定的通訊協(xié)議將需要更新的程序通過(guò)串口傳輸給IAP程序,再由IAP程序將數據寫(xiě)到用戶(hù)的Flash區域;從而達到IAP功能,如圖所示:

2 STM32和上位機的通訊協(xié)議

如何將更新程序的bin文件數據傳輸到STM32系統內部?

如何將串口接收到的一連串數據給解析出來(lái),進(jìn)行有效數據的寫(xiě)Flash?

如何得知數據傳輸的開(kāi)始?

又如何得知數據傳輸的結束?

……

以上的種種疑惑,都是我們必須要關(guān)心的問(wèn)題;而這些問(wèn)題都隱藏著(zhù)一樣的本質(zhì)——如何獲取PC端有用的信息?

對于如何獲取有用信息,有幾個(gè)問(wèn)題需要考慮:

通過(guò)何種方式獲取?——我們采用USART;

何種數據才是有用的?——我們指定一個(gè)簡(jiǎn)單的協(xié)議;

又是如何實(shí)現IAP程序和APP程序的切換的;

在硬件上,USART的實(shí)現較為簡(jiǎn)單;我們重點(diǎn)在于協(xié)議的設計和理解;

3 STM32—IAP程序的實(shí)現

1、IAP通過(guò)USART和上位機通訊,實(shí)現數據的下發(fā)和在應用編程;如圖:

2、上位機和STM32系統USART之間通過(guò)一個(gè)簡(jiǎn)單的協(xié)議進(jìn)行連接;

當連續收到4次0xBB后,表示開(kāi)始接收用戶(hù)代碼;

當連續收到4次0xEE后,表示結束接收用戶(hù)代碼;如圖:

3、IAP程序位于Flash啟動(dòng)的起始地點(diǎn),判斷相應標志,是更新程序,或是運行用戶(hù)程序;IAP程序更新之后,設定標志,跳轉到用戶(hù)程序區去,完成IAP,實(shí)現新的用戶(hù)功能;如圖:

4 STM32—上位機程序的實(shí)現

如圖,為一個(gè)簡(jiǎn)單的上位機界面:

上位機主要分為兩個(gè)部分:

1、串口配置部分:

選擇端口、波特率,和數據類(lèi)型,點(diǎn)擊USART Open按鈕;

2、串口通訊部分:

通訊部分,可以通過(guò)三步進(jìn)行一次IAP功能的實(shí)現;

A、發(fā)送起始字節——0xBBBBBBBB

B、發(fā)送用戶(hù)代碼——通過(guò)轉換Hex文件獲取

C、發(fā)送結束字節——0xEEEEEEEE

5上位機和STM32實(shí)現IAP功能的注意

1、上位機和STM32系統需要有相對應符合的通訊協(xié)議;

2、上位機和STM32系統的設計,要考慮到程序處理時(shí)間;防止時(shí)間的因素而無(wú)法響應;

3、為提高可靠性和安全性,需要設計更為友好的通訊協(xié)議;

至此,關(guān)于《STM32實(shí)現IAP(上位機和IAP程序設計)》知識已經(jīng)結束;

至此,關(guān)于STM32存儲器知識等三篇筆記都已經(jīng)結束。

完成STM32存儲器知識過(guò)程中,一共參考了以下官方文檔:

《RM0008 Reference manual》

《Cortex-M3技術(shù)參考手冊》

《PM0042 Programming manual:STM32F10xxx Flash programming》

《AN2557 Application note:STM32F10x in-application programming using the USART》

等等;

另外也參考了很多無(wú)私網(wǎng)友的奉獻,在此感謝。

關(guān)于我的STM32存儲器知識共有三篇文章,分別是:

stm32的存儲器》

《STM32存儲器知識的相關(guān)應用(IAP、Bit Banding)》

《STM32實(shí)現IAP(上位機和IAP程序設計)》



關(guān)鍵詞: stm32IA

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>