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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 IAP 設(shè)計(jì)實(shí)例 (一)

          STM32 IAP 設(shè)計(jì)實(shí)例 (一)

          作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
          項(xiàng)目需要,需要開發(fā)一款手持設(shè)備,對(duì)產(chǎn)品進(jìn)行軟件升級(jí)?,F(xiàn)在的產(chǎn)品都是使用STM32,所以可以很方便的應(yīng)用STM32的 IAP功能對(duì)軟件進(jìn)行在線升級(jí)。

          總體需求就是,主機(jī)Master通過(guò)CAN接口,發(fā)送數(shù)據(jù)給從機(jī)Slave。從機(jī)在接收到應(yīng)用程序APP后,把接收的數(shù)據(jù)覆蓋掉原來(lái)的應(yīng)用程序區(qū)。從而實(shí)現(xiàn)Master對(duì)Slave的在線升級(jí)。

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

          這里先介紹IAP,對(duì)IAP的整體實(shí)現(xiàn)有個(gè)了解,方便后續(xù)開發(fā)。參考了原子STM32開發(fā)板,對(duì)IAP功能的介紹。

          要實(shí)現(xiàn)IAP,需要有兩個(gè)項(xiàng)目代碼。第一個(gè)稱之為Bootloader程序,第二個(gè)稱之為APP程序。Bootloader負(fù)責(zé)引導(dǎo)APP程序啟動(dòng),以及需要在線更新APP時(shí),接收主機(jī)發(fā)送的APP文件,將接收的APP覆蓋掉原來(lái)的APP。

          關(guān)于IAP的具體內(nèi)容,可以參考原子STM32開發(fā)板的開發(fā)指南的五十三章。

          下面是自己對(duì)IAP有大概了解之后,進(jìn)行的實(shí)驗(yàn)。1,編寫bootloader程序測(cè)試程序,用來(lái)引導(dǎo)指定位置的APP。2,修改原來(lái)的一個(gè)應(yīng)用程序,使之可以用該bootloader引導(dǎo)。3,通過(guò)jlink下載器,分別下載bootloader和APP。

          一,bootloader程序。

          主要代碼如下,流水燈之后,執(zhí)行跳轉(zhuǎn)到APP區(qū)域的命令

          [cpp]view plaincopy
          1. intmain(void)
          2. {
          3. delay_init();
          4. LED_Init();
          5. LED1=0;
          6. delay_ms(200);//延時(shí)
          7. LED2=0;
          8. delay_ms(200);//延時(shí)
          9. LED3=0;
          10. delay_ms(200);//延時(shí)
          11. LED4=0;
          12. delay_ms(200);//延時(shí)
          13. LED1=1;
          14. delay_ms(200);//延時(shí)
          15. LED2=1;
          16. delay_ms(200);//延時(shí)
          17. LED3=1;
          18. delay_ms(200);//延時(shí)
          19. LED4=1;
          20. delay_ms(200);//延時(shí)
          21. iap_load_app(FLASH_APP1_ADDR);//執(zhí)行FLASHAPP代碼
          22. }
          [cpp]view plaincopy
          1. #defineFLASH_APP1_ADDR0x08003C00//第一個(gè)應(yīng)用程序起始地址(存放在FLASH)
          2. //保留前15K的空間做為bootloader區(qū)
          FLASH的起始地址是0x0800 0000,所以0x0800 0000~0x0800 3C00用于存放Bootloader。

          二、APP程序區(qū)。

          完成中斷向量表的重定位。工程配置下載位置

          [cpp]view plaincopy
          1. intmain(void)
          2. {
          3. SCB->VTOR=FLASH_BASE|0x3C00;
          4. /*Infiniteloop*/
          5. while(1)
          6. {
          7. OSInit();
          8. OSTaskCreate(Start_Task,
          9. (void*)0,
          10. &Start_Task_Stk[START_TASK_STK_SIZE-1],
          11. START_TASK_PRIO);
          12. OSStart();
          13. return0;
          14. }
          15. }
          在main函數(shù),最開始處加入SCB->VTOR = FLASH_BASE | 0x3C00;這里的0x3C00,即在bootloader中設(shè)定的Bootloader區(qū)域。

          jlink下載的地址配置成起始地址是0x0800 3C00。 這樣下載的時(shí)候不會(huì)把bootloader區(qū)域擦除。

          最后在keil下, 分別下載bootloader , APP兩個(gè)工程, 可以看到bootloader流水燈最后,APP程序被啟動(dòng)。

          通過(guò)該實(shí)驗(yàn),可以實(shí)現(xiàn)bootloader程序?qū)PP的引導(dǎo)。后續(xù)可以再實(shí)現(xiàn)主機(jī)通過(guò)CAN發(fā)送數(shù)據(jù)給從機(jī),從機(jī)更新APP數(shù)據(jù)到flash,即可實(shí)現(xiàn)升級(jí)。

          bootloader的示例代碼,APP的代碼在公司原來(lái)的工程上改,不方便公開,只要按照上面的說(shuō)明進(jìn)行配置,即可以進(jìn)行實(shí)驗(yàn)。



          關(guān)鍵詞: STM32IA

          評(píng)論


          技術(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); })();