<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          stm32 IAP 實(shí)現(xiàn)

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/316280.htm

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

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

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

          下位機(jī)(指的是STM32構(gòu)成的單片機(jī)系統(tǒng)):

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

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

          使用STM32F103C8-PKT開發(fā)板進(jìn)行調(diào)試和驗(yàn)證;

          上位機(jī)(指的是PC構(gòu)成的PC系統(tǒng)):

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

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

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

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

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

          上位及通訊一定的通訊協(xié)議將需要更新的程序通過串口傳輸給IAP程序,再由IAP程序?qū)?shù)據(jù)寫到用戶的Flash區(qū)域;從而達(dá)到IAP功能,如圖所示:

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

          如何將更新程序的bin文件數(shù)據(jù)傳輸?shù)絊TM32系統(tǒng)內(nèi)部?

          如何將串口接收到的一連串?dāng)?shù)據(jù)給解析出來,進(jìn)行有效數(shù)據(jù)的寫Flash?

          如何得知數(shù)據(jù)傳輸?shù)拈_始?

          又如何得知數(shù)據(jù)傳輸?shù)慕Y(jié)束?

          ……

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

          對于如何獲取有用信息,有幾個問題需要考慮:

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

          何種數(shù)據(jù)才是有用的?——我們指定一個簡單的協(xié)議;

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

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

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

          1、IAP通過USART和上位機(jī)通訊,實(shí)現(xiàn)數(shù)據(jù)的下發(fā)和在應(yīng)用編程;如圖:

          2、上位機(jī)和STM32系統(tǒng)USART之間通過一個簡單的協(xié)議進(jìn)行連接;

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

          當(dāng)連續(xù)收到4次0xEE后,表示結(jié)束接收用戶代碼;如圖:

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

          4 STM32—上位機(jī)程序的實(shí)現(xiàn)

          如圖,為一個簡單的上位機(jī)界面:

          上位機(jī)主要分為兩個部分:

          1、串口配置部分:

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

          2、串口通訊部分:

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

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

          B、發(fā)送用戶代碼——通過轉(zhuǎn)換Hex文件獲取

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

          5上位機(jī)和STM32實(shí)現(xiàn)IAP功能的注意

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

          2、上位機(jī)和STM32系統(tǒng)的設(shè)計(jì),要考慮到程序處理時間;防止時間的因素而無法響應(yīng);

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

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

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

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

          《RM0008 Reference manual》

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

          《PM0042 Programming manual:STM32F10xxx Flash programming》

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

          等等;

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

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

          stm32的存儲器》

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

          《STM32實(shí)現(xiàn)IAP(上位機(jī)和IAP程序設(shè)計(jì))》



          關(guān)鍵詞: stm32IA

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();