STM32 双Bank切换时,如何避免Flash擦写期间中断向量表跳飞?

· 1 浏览

回答(4)

注意:双Bank切换时,需先配置Flash控制器的Bank切换寄存器,并等待操作完成,期间避免任何中断触发,否则可能导致硬件错误。
硬件控小王 · 2026-08-27
实操:在擦写前,将中断向量表复制到RAM,并设置VTOR指向RAM中的副本,这样即使Flash被擦写,中断也能正常响应。
代码工匠 · 2026-08-27
补充:利用STM32的Flash双Bank特性,可将中断向量表放在Bank1,而应用代码在Bank2执行,但需确保VTOR指向Bank1,且Bank1不被擦写。
嵌入式老张 · 2026-08-27
在STM32双Bank切换时,避免Flash擦写期间中断向量表跳飞的关键是确保中断向量表(VTOR)指向当前可执行的Bank,并禁用可能触发中断的源。具体实操:1)在切换前,将VTOR重定位到目标Bank的起始地址(如Bank2的0x08080000),并确保目标Bank已包含有效的向量表;2)在擦写期间,关闭全局中断(如__disable_irq()),或仅禁用可能被触发的中断(如SysTick、外部中断),并确保擦写完成后恢复;3)若使用RTOS,需暂停调度器;4)对于双Bank同时操作,利用STM32的硬件机制(如FMC的Bank切换寄存器)确保CPU从非擦写Bank取指。建议在切换前备份关键状态,并在切换后校验向量表有效性。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

⏱️ 定时器计算器