本帖最后由 路上的工匠 于 2022-4-21 15:11 编辑
越来越多的应用会用到IAP升级,通过BOOTLOADER+APP的方式来实现固件升级功能,ARM -M3以及后面更高级的内核都可以通过设置SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET来实现中断向量表的偏移,提供了很大的便利,但是STM32 较老的M0核因为没有此寄存器,要实现中断向量表的重映射,需要:
1、将中断向量表放入到RAM的起始地址(只需要在应用程序中保留RAM起始地址的0x100大小不使用即可)。
2、在Bootloader中将应用程序的中断向量表从Flash中拷贝到RAM中。
3、设置STM32F0xx中断向量表位于RAM中,
过程较为繁琐,也会占用RAM资源,随着技术的发展,ARM也捕捉到了这个痛点,所以在M0+核增加了SCB->VTOR功能,不过需要手动开启,那么到底怎么做呢,以APM32F0XX_SDK_V1.6为例。
1.移植最新的M0+内核文件以及相关的内核文件,我这里最新的内核文件是用CUBEMX 选择STM32G0型号(G0是M0+核)任意生成一个工程,然后将库里的需要的头文件移植过来,替代原来的库文件
2.apm32f0xx.h中的#include "core_cm0.h" 改成 #include"core_cm0plus.h"3.#define__VTOR_PRESENT 1 /*!<Vector Table Register supported */将此定义添加至apm32f00x.h中打开此功能
4.验证
将BOOTLOADER+例程APP烧录进开发板 ,APP地址偏移3000,测试成功。
|