在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

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

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

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

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

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

            下面是自己對IAP有大概了解之后,進(jìn)行的實(shí)驗。1,編寫bootloader程序測試程序,用來引導(dǎo)指定位置的APP。2,修改原來的一個應(yīng)用程序,使之可以用該bootloader引導(dǎo)。3,通過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);//延時
            7. LED2=0;
            8. delay_ms(200);//延時
            9. LED3=0;
            10. delay_ms(200);//延時
            11. LED4=0;
            12. delay_ms(200);//延時
            13. LED1=1;
            14. delay_ms(200);//延時
            15. LED2=1;
            16. delay_ms(200);//延時
            17. LED3=1;
            18. delay_ms(200);//延時
            19. LED4=1;
            20. delay_ms(200);//延時
            21. iap_load_app(FLASH_APP1_ADDR);//執(zhí)行FLASHAPP代碼
            22. }
            [cpp]view plaincopy
            1. #defineFLASH_APP1_ADDR0x08003C00//第一個應(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。 這樣下載的時候不會把bootloader區(qū)域擦除。

            最后在keil下, 分別下載bootloader , APP兩個工程, 可以看到bootloader流水燈最后,APP程序被啟動。

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

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



            關(guān)鍵詞: STM32IA

            評論


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

            關(guān)閉