<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學(xué)習記錄18 IAP(1)

STM32學(xué)習記錄18 IAP(1)

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

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

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

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

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

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

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

一,bootloader程序。

主要代碼如下,流水燈之后,執行跳轉到APP區域的命令

[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);//執行FLASHAPP代碼
  22. }
[cpp]view plaincopy
  1. #defineFLASH_APP1_ADDR0x08003C00//第一個(gè)應用程序起始地址(存放在FLASH)
  2. //保留前15K的空間做為bootloader區
FLASH的起始地址是0x0800 0000,所以0x0800 0000~0x0800 3C00用于存放Bootloader。

二、APP程序區。

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

[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函數,最開(kāi)始處加入SCB->VTOR = FLASH_BASE | 0x3C00;這里的0x3C00,即在bootloader中設定的Bootloader區域。

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

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



關(guān)鍵詞: STM32學(xué)習記錄IA

評論


技術(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>