STM32中如何在主函数中设置中断向量表编译到APP中
时间: 2023-06-14 19:03:39 浏览: 119
在STM32中,可以通过以下步骤在主函数中设置中断向量表编译到APP中:
1. 首先,需要在代码中引入CMSIS头文件及STM32F1xx系列头文件,例如:
```
#include "stm32f1xx.h"
#include "core_cm3.h"
```
2. 接着,需要定义一个函数指针数组,用于存放中断服务函数的地址。例如:
```
void (* const g_pfnVectors[])(void) = {
(void (*)(void))((uint32_t)&Image$$ARM_LIB_STACK$$ZI$$Limit),
Reset_Handler,
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
0,
0,
0,
0,
SVC_Handler,
DebugMon_Handler,
0,
PendSV_Handler,
SysTick_Handler,
/* Interrupts */
WWDG_IRQHandler,
...
};
```
其中,`g_pfnVectors`数组中存放了所有中断服务函数的地址,这些地址按照中断向量表的顺序进行排列。
3. 在主函数的开头,需要将中断向量表的地址重新定位到g_pfnVectors数组中,例如:
```
void relocate_vector_table(void)
{
SCB->VTOR = (uint32_t)g_pfnVectors;
}
```
在这个函数中,将`g_pfnVectors`数组的地址赋值给`VTOR`寄存器即可。然后在主函数的开头调用`relocate_vector_table()`函数即可。
4. 最后,在编译时需要设置链接脚本,使得中断向量表被编译到APP中。例如,在Keil MDK中,可以在链接选项中添加以下语句:
```
--entry=Reset_Handler \
--scatter=scatter_file.sct \
--ro-base=0x08000000 \
--rw-base=0x20000000 \
--first=Reset_Handler \
```
其中,`scatter_file.sct`是链接脚本文件的名称,`--ro-base`和`--rw-base`分别指定代码段和数据段的起始地址。`--entry`指定程序的入口地址,这里设置为`Reset_Handler`。`--first`也指定程序的入口地址,这里同样设置为`Reset_Handler`。
通过以上步骤,就可以在主函数中设置中断向量表编译到APP中了。
阅读全文