在STM32F4上,中断延迟抖动主要源于Flash访问等待和预取缓冲未命中。首先,将Flash等待周期设为5(对应168MHz,参考手册Table 5),确保CPU访问Flash时无需额外等待。其次,启用预取缓冲(FLASH_ACR的PRFTEN位),并确保指令和数据访问尽量命中缓存,避免因预取未命中导致总线停顿。实操建议:1) 将中断服务函数和关键代码放在SRAM中(如通过__attribute__((section(".sram")))),彻底消除Flash延迟;2) 配置中断优先级分组,避免高优先级中断被低优先级任务阻塞;3) 使用DMA传输数据,减少CPU中断处理中的内存访问。此外,可关闭Flash的指令缓存(ICEN)和数据缓存(DCEN)的自动预取策略,改为手动预取关键代码段,但需权衡性能。实测中,将ISR移入SRAM后,抖动可从±10周期降至±2周期。
mcuku 阿沐 · 2026-08-27