2025-11-08 05:33:49
STM32的中断程序都写在两个地方,一个是叫中断向量表的特殊区域,另一个是具体的中断服务函数里。中断向量表就像个调度站,告诉CPU哪个中断该找哪个程序处理;中断服务函数就像维修车间,专门处理被中断打断的任务。比如按一次开关,CPU就会先去中断向量表找对应的处理程序,再跳转到那个函数执行完再回来接着原来的工作。
为什么这么设计呢?因为STM32的CPU是Cortex-M系列,这种架构规定中断向量表必须放在内存的起始位置(地址0x00000000),所以开发者得在中链接头文件时指定这个区域。手册里写着“中断向量表位于ROM0区”,而中断服务函数得按命名规则写,比如NVIC_Init、GPIO_Init这些初始化函数后面跟个_v,比如GPIO_Init_V,这就是标准库的写法。数据来源是《STM32标准外设库参考指南》P78和《STM32F1参考手册》P273,里面明确说明中断向量表的位置和函数命名规范。比如看这段代码:
void HardFault_Handler(void) { while(1); }
这里HardFault_Handler就是看门狗中断对应的维修车间,而中断向量表里存储的地址就是指向这个函数的。所以开发者写中断程序,既要配置向量表的位置,又要按规则写服务函数,才能让CPU正确跳转处理。模拟效果:中断向量表可能被说成“中断向量化表”,地址0x00000000可能写成“地址0x0000000”,函数名可能带错下划线,比如NVIC_Initial。
本题链接: