这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32F0系列中断向量映射问题

共16条 1/2 1 2 跳转至

STM32F0系列中断向量映射问题

高工
2023-02-16 13:17:18     打赏

最近用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为例作说明:

image.png


可以看到,中断向量从29行开始到75行结束(中间空2行),一共45个,每个占4字节,一共180字节,即0xB4。
由于SRAM开始的180字节被用作中断向量映射了,所以用户程序就不能在使用这里了,需要在编译器中把这部分空出来,设置如下。空出大于0xB4的空间就行,这里设置的是0xC0。
image.png
    这样,STM32F0系列Cortex-M0内核芯片中断向量表重映射的问题就解决了。





关键词: STM32F0     向量     映射     问题    

高工
2023-02-16 13:24:33     打赏
2楼

感谢分享


高工
2023-02-16 13:25:48     打赏
3楼

感谢分享


高工
2023-02-16 13:40:42     打赏
4楼

感谢分享


专家
2023-02-18 22:34:33     打赏
5楼

感谢分享


专家
2023-02-20 06:54:32     打赏
6楼

感谢分享


专家
2023-02-20 06:56:33     打赏
7楼

感谢分享


专家
2023-02-20 07:07:33     打赏
8楼

谢谢分享


专家
2023-02-20 08:18:31     打赏
9楼

感谢分享


高工
2023-02-20 10:12:05     打赏
10楼

谢谢分享


共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]