• 关于STM32单片机的IAP实现


    基于STM32F103单片机的IAP实现(虽然该篇文章不会详细写出实现细节,但是会从一个全局的角度讲述,实际的实现细节只需根据datasheet即可完成)。

    一、基础概念

          什么是IAPIAP即在应用中编程(In-Application Programming IAP),简单的说就像是一个用户自定义的升级程序。实际上,STM32单片机的程序烧写有多种方法,可以用JTAG,也可用串口通过ISP软件烧写新程序。

    JTAG的方式需要专用的烧写工具,在产品布置到现场后,更新产品程序比较麻烦,而通过串口的ISP软件升级方法可以直接使用常见的串口线升级程序,十分方便,这种方法用的是ISPISP可以说是单片机默认的bootloader

    正常情况下,单片机系统启动后,会直接从用户程序执行,而升级程序时,单片机会进入bootloader,在ISP中一直运行。ISP虽然方便了升级,但是还是没法解决用户自定义和远程升级的问题。对于用户来说,有时候可能需要在单片机

    flash不同地址烧写多个应用程序,用于根据不同条件启动不同应用程序;有时候,产品分布到全国各地,去所有现场升级程序明显不理智,解决方法是将升级程序放到服务器上,发送远程升级指令,设备进入IAP升级程序,从远程

    获取升级应用程序,实现在线升级。

    二、IAP实现

    1.硬件

    STM32单片机的启动方式有三种,

    单片机根据boot0boot1的引脚来确定启动方式。主闪存存储器即为用户程序空间,IAP启动将会从这里开始,系统存储器是ISP启动,内置SRAM不讨论。正常情况下,boot0管脚接入低电平,单片机从应用程序开始执行;当使用ISP升级时,boot01boot10,系统进入ISP程序,等待串口升级,升级完成后,需要断电,改变boot电平,重新启动,让单片机从应用程序执行。(所以ISP升级时,还需要关注有关boot脚的电平开关问题。)

    IAP升级不需要改变任何管脚电平,因为它实际上就是一个应用程序,只是让单片机启动时先执行它,执行完后,跳转到真正的应用程序执行。

    注意:单片机第一次烧写时,是需要通过JTAGISP烧写IAP的,如果打算用ISP,那最好留一个boot脚的硬件拨码开关用于首次ISP升级hex文件。

    2.软件

    弄清楚硬件之后,就知道什么样的硬件boot对应什么样的启动方式。加入IAP之后,系统启动时会先执行IAP程序用于判断是否达到升级条件和执行什么样的升级配置,相应的逻辑类似于下图:

     

    用户可以根据自己的需求来设计IAP程序,详细设计可以参考ST官方资料:               

     《使用STM32F10xxxUSART 实现在应用中编程》,而且官方也给出了例程,资料比较全面,实现起来也很简单。

    最后,提醒注意一点的是,在IAP后面的应用程序都要在系统启动时重新定义中断向量表。

  • 相关阅读:
    iOS:Core Data 中的简单ORM
    Win8:Snap 实现
    js: 删除node的所有child
    WinJS:Listview item 设置背景透明
    iOS: 消息通信中的Notification&KVO
    win8: 清除iframe的缓存
    What's New in iOS7,iOS7新特性介绍
    "Entity Framework数据插入性能追踪"读后总结
    夜,思考——我想要的到底是什么?
    【查询】—Entity Framework实例详解
  • 原文地址:https://www.cnblogs.com/Victor-Tian/p/5958851.html
Copyright © 2020-2023  润新知