打印
[APM32F1]

APM32F103_IAP的简单实现_1 程序跳转基础

[复制链接]
604|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WuKaiLi|  楼主 | 2022-4-28 15:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 WuKaiLi 于 2022-10-26 19:25 编辑

#申请原创#  #技术资源#
1 前言
    最近拿到了一块APM32F103VC的MINI开发板,在学习了一段时间后发现其有非常丰富的外设资源,主频能达到96Mhz。最近在项目中使用到了IAP(In Application Programming)功能,特来评估一下APM32F103的IAP实现方式。

在应用编程IAP(In-Application Programming)是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。

2 程序跳转基础

实现IAP,最重要的是实现在BootLoader程序跳转至APP中然后是APP程序正常运行,能够正常的响应自己的中断。由于APP程序一般不是保存在Flash的起始位置,这里我们引入知识点“PC指针”和“中断向量表”。

2.1 程序计数器

单片机的PC是指程序计数器(Program Counter)。程序计数器用于存放下一条将要执行的指令地址。当执行一条指令时,首先需要根据程序计数器中存放的指令地址,将指令取出送到指令寄存器中,此过程称为“取指令”。与此同时,程序计数器中的地址编制的程序进行自动加1跳转操作,得到下一条指今的地址。当前一条指令执行完毕,单片机再根据程序计数器取出下一条指令的地址,并再得到再下条指令地址,依次执行每一条指令。

简而言之,只要我们在BootLoader跳转至APP时将,程序计数器里面的内容装载入我们APP的起始函数,我们就能够运行APP起来啦。

2.2 中断向量表

中断向量表是程序用于响应中断的基础。单片机程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动。当中断来临, 单片机的内部硬件机制亦会自动将 PC 指针定位到“中断向量表”处,并根据中断源取出对应的中断向量执行中断服务程序。我们编写的BootLoader跳转至APP时,需要让APP的中断向量表映射到相应的位置。

若不对APP的向量表进行重映射,将会发生什么情况呢?即BootLoader程序跳转至APP后,若在APP程序运行过程中发生中断,则会去执行BootLoader的中断服务函数而造成整个系统异常。

2.3 向量表偏移量寄存器

APM32F103VC这块芯片是基于M3内核的。通过查阅M3内核参考手册,里面有一个向量表偏移寄存器VTOR。这个寄存器是我们APP能正常运行程序的基础,通过设置该寄存器。我们可以轻而易举完成APP向量表的重映射。



理论上只要我们跳转至APP程序后将向量表偏移量寄存器指向我们的APP存放中断向量表的地方,我们即可让单片机能够在发生中断的时候正确执行APP的中断服务函数。

(由于个人技术有限,可能在编撰**时出现漏洞,欢迎大家指出

(IAP原理涉及内容较多,后续会持续更新相关学习心得以及代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

37

帖子

1

粉丝