越来越多的应用会用到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功能,不过需要手动开启,那么到底怎么做呢,以极海半导体的APM32F072XX_SDK_V1.6为例。
1.移植最新的M0+内核文件以及相关的内核文件,我这里最新的内核文件是用CUBEMX 选择STM32G0型号(G0是M0+核)任意生成一个工程,然后将库里的需要的头文件移植过来,替代原来的库文件
4.验证
将BOOTLOADER+例程APP烧录进开发板 ,APP地址偏移3000,测试成功。