×

STM32 在程序中编程方案(IAP)

消耗积分:0 | 格式:rar | 大小:0.1 MB | 2017-09-12

分享资料个

  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 常规的运行流

  程
STM32 在程序中编程方案(IAP)

  对图 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)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !