zoukankan      html  css  js  c++  java
  • STM32的IAP应用转载

    STM32支持在应用中编程,也就是所谓的IAP,这对产品的在线升级带来了很大方便。


    在线升级的原理简介如下:


    在单片机的FLASH中有两段代码,一段是IAP代码,另一段就是用户的应用程序即APP代码,IAP代码放在单片机复位时的起始地址,而APP代码则放在IAP后面的地址,上电时CPU首先执行IAP代码,再通过IAP代码跳转到APP代码开始执行。


    在IAP代码执行期间,通过检测某一个事件(如IO电平)来判断是否对APP代码进行更新,如果该事件无效,则不更新,直接跳转到APP代码执行;如果该事件有效,则更新APP代码,而更新的文件则从外部磁盘通过串口或USB写入FALSH应用程序空间。


    流程图如下:


    d9d64f2c-ff00-4564-8eac-43ee637d2f95.JPG



    当然,这只是一种最简单的方式,它还可以是当APP代码在执行时,将PC指针跳转到IAP来更新自已。


    实现的大致原理都是一致的,只是方式不同罢了。


    值得注意的是:


    IAP跳转的地址必须APP的起始地址一致,相应的中断向量表也要修改,否则APP将不能正确的运行。


    在附件我整理的代码中,串口方式的IAP跳转的地址为0x8002000,因此应用程序的起始地址也应为0x8002000,在KEIL设置下如下图:



    5070379d-ba8f-4a27-82e1-7f970f93a6a9.JPG


    还有中断向量表的起始地址也应改为0x8002000:


    /* Set the Vector Table base address at 0x08002000 */


    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);  // NVIC_VectTab_FLASH=0x08000000


    只有以上两处设置正确才能确保APP能正确的运行。


    USB方式的IAP跳转的地址为0x8004000,设置方法同上。


    升级文件传输方式


    串口方式的IAP在超级终端下用Ymode协议,波特率115200;文件为.BIN格式。


    USB方式的IAP用DfuSe USB Device Firmware Upgrade软件传送,文件为dfu格式。


    总的来说,IAP带给我的体验还是非常愉快的!


    程序和本文PDF 


  • 相关阅读:
    第十三周助教小结
    记事本
    第十二周助教小结
    与周老师会谈之后的感想
    第十一周总结
    第十周助教总结
    听周筠老师一席话,受益匪浅
    2020软件工程作业04
    2020软件工程作业02
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/glguan/p/2272457.html
Copyright © 2011-2022 走看看