IAP,全称是“In-Application Programming”,中文解释为“在程序中编程”。IAP 是一种
对通过微控制器的对外接口(如 USART,IIC,CAN,USB,以太网接口甚至是无线射频通道)
对正在运行程序的微控制器进行内部程序的更新的技术(注意这完全有别于 ICP 或者 ISP 技
术)。ICP(In-Circuit Programming)技术即通过在线仿真器对单片机进行程序烧写,而 ISP 技
术则是通过单片机内置的 bootloader 程序引导的烧写技术。无论是 ICP 技术还是 ISP 技术,
都需要有机械性的操作如连接下载线,设置跳线帽等。若产品的电路板已经层层密封在外壳
中,要对其进行程序更新无疑困难重重,若产品安装于狭窄空间等难以触及的地方,更是一
场灾难。但若进引入了 IAP 技术,则完全可以避免上述尴尬情况,而且若使用远距离或无线
的数据传输方案,甚至可以实现远程编程和无线编程。这绝对是 ICP 或 ISP 技术无法做到的。
某种微控制器支持 IAP 技术的首要前提是其必须是基于可重复编程闪存的微控制器。STM32
微控制器带有可编程的内置闪存,同时 STM32 拥有在数量上和种类上都非常丰富的外设通
信接口,因此在 STM32 上实现 IAP 技术是完全可行的。
实现 IAP 技术的核心是一段预先烧写在单片机内部的 IAP 程序。这段程序主要负责与外
部的上位机软件进行握手同步,然后将通过外设通信接口将来自于上位机软件的程序数据接
收后写入单片机内部指定的闪存区域,然后再跳转执行新写入的程序,最终就达到了程序更
新的目的。
在 STM32 微控制器上实现 IAP 程序之前首先要回顾一下 STM32 的内部闪存组织架构和
其启动过程。STM32 的内部闪存地址起始于 0x8000000,一般情况下,程序文件就从此地址
开始写入。此外 STM32 是基于 Cortex-M3 内核的微控制器,其内部通过一张“中断向量表”
来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完
成启动。而这张“中断向量表”的起始地址是 0x8000004,当中断来临,STM32 的内部硬件
机制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行
中断服务程序。最后还需要知道关键的一点,通过修改 STM32 工程的链接脚本可以修改程
序文件写入闪存的起始地址。
在 STM32 微控制器上实现 IAP 方案,除了常规的串口接收数据以及闪存数据写入等常
规操作外,还需注意 STM32 的启动过程和中断响应方式。图 1 显示了 STM32 常规的运行流
程
对图 1 解读如下:
1、 STM32 复位后,会从地址为 0x8000004 处取出复位中断向量的地址,并跳转执行复位中
断服务程序,如图 1 中标号○1 所示。
2、 复位中断服务程序执行的最终结果是跳转至 C 程序的 main 函数,如图 1 中标号○2 所示,
而 main 函数应该是一个死循环,是一个永不返回的函数。
3、 在 main 函数执行的过程中,发生了一个中断请求,此时 STM32 的硬件机制会将 PC 指
针强制指回中断向量表处,如图 1 中标号○3 所示。
4、 根据中断源进入相应的中断服务程序,如图 1 中标号○5 所示。
5、 中断服务程序执行完毕后,程序再度返回至 main 函数中执行,如图 1 中标号○6 所示。
若在 STM32 中加入了 IAP 程序,则情况会如图 2 所示。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !