最近用Cortex-M0内核的STM32F030K6T6做个东西,需要做IAP升级,发现它的中断向量与M3、M4等内核的单片机不太一样,这里分享给大家。
IAP升级需要一个BootLoader程序,一个应用程序。BootLoader程序直接烧写到flash起始地址就行,中断向量也不用改。但是应用程序需要烧写到BootLoader程序后面,且中断向量必须重新映射。
M3、M4等内核的单片机,直接修改中断向量的偏移地址(VECT_TAB_OFFSET)就行。但在M0内核的库中,根本就没有这个定义。查阅相关资料发现,M0内核的中断向量需要用户自己从Flash映射到RAM中,即0x20000000地址。
实际操作也很简单,在程序开始加上这两句话:
#define IAP_ADDR ((uint32_t)0x08002800)
memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4);
__HAL_SYSCFG_REMAPMEMORY_SRAM();
其中0x20000000是SRAM的地址,IAP_ADDR是应用程序的起始地址,0xB4是中断向量表的大小。具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:

本文介绍了如何为STM32F030K6T6这款Cortex-M0内核的单片机进行IAP升级。详细解释了中断向量映射的方法,并给出了具体的实现代码示例。
最低0.47元/天 解锁文章
583

被折叠的 条评论
为什么被折叠?



