为何STM32启动代码中未定义Flash全局中断处理函数?
STM32F407 Flash中断向量表预留问题解答
问题描述
我正在基于裸机实现STM32F407驱动,处理Flash存储器操作的中断处理函数时遇到困惑。根据《STM32F405xx/07xx及STM32F415xx/17xx参考手册》向量表章节第372页,Flash全局中断处理函数的地址对应0x0000 0050,但查看STM32官方提供的启动代码,该位置却是预留项:
.word RTC_WKUP_IRQHandler /* RTC Wakeup interrupt through the EXTI line */ .word 0 /* Reserved */ .word RCC_IRQHandler /* RCC global interrupt
无法理解ST为何在启动代码中将手册明确标注的Flash中断地址设为预留。
原因分析
- ST的通用启动代码是为整个STM32F4系列设计的,部分子型号硬件不支持Flash中断,所以统一将该位置设为预留,保证代码在全系列型号上的兼容性。
- STM32F407确实支持Flash全局中断(包含Flash操作错误、编程/擦除完成等触发源),你只需手动修改启动代码,把预留的
.word 0替换为自定义的Flash_IRQHandler函数名即可。 - 注意:修改向量表后,还需通过寄存器或固件库开启对应的Flash中断使能位,否则即使向量表配置正确,中断也无法正常触发。
内容的提问来源于stack exchange,提问作者abdo Salm
相关产品推荐
相关产品推荐

