最近用Cortex-M0内核的STM32F030K6T6做个东西,需要做IAP升级,发现它的中断向量与M3、M4等内核的单片机不太一样,这里分享给大家。 M3、M4等内核的单片机,直接修改中断向量的偏移地址(VECT_TAB_OFFSET)就行。但在M0内核的库中,根本就没有这个定义。查阅相关资料发现,M0内核的中断向量需要用户自己从Flash映射到RAM中,即0x20000000地址。4 R" f, d8 x$ K2 S+ ^2 r% R( s; C 实际操作也很简单,在程序开始加上这两句话:
/ x, ?/ ?* }5 A: w, l9 y, G 其中0x20000000是SRAM的地址,IAP_ADDR是应用程序的起始地址,0xB4是中断向量表的大小。具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:1 r$ _, {& j$ u- X) g, e9 [ * I( J' ^9 B3 F 可以看到,中断向量从29行开始到75行结束(中间空2行),一共45个,每个占4字节,一共180字节,即0xB4。3 N" |: U# w% v. ? 3 j+ X+ m2 o7 L& s: y# [% h 由于SRAM开始的180字节被用作中断向量映射了,所以用户程序就不能在使用这里了,需要在编译器中把这部分空出来,设置如下。空出大于0xB4的空间就行,这里设置的是0xC0。# i: d( N) X7 w4 C 8 ?$ U8 e: n% q7 @* c+ \ 这样,STM32F0系列Cortex-M0内核芯片中断向量表重映射的问题就解决了。 来源:嵌入式技术开发' l( O, \5 t* Q6 `8 k! V + `# Z; g$ y* P% {- t! K: W7 A0 H & R: J; s; p6 f( X- E. g |
STM32固件库分享,超全系列整理
三创电子(Tcreate)-STM32F030核心板代码
STM32F0 ADC(DMA中断)多通道,注释超详细
FreeRTOS在STM32F030上的移植
基于STM32移植而引发的疑问经验分享
分享STM32F051中文参考手册(重制书签版)
游名:STM32F0+Trinamic智能步进驱动芯片TMC5160(最高20A)参考原...
【MCU实战经验】+STM32F030的步进电机加减速
STM32F0的中文技术参考手册(标签处理过)
基于STM32F030硬件SPI经验分享