在STM32F4上,中断延迟抖动主要源于Flash访问瓶颈和预取缓冲未命中。要显著降低抖动,首先必须正确配置Flash等待周期:168MHz下需设置至少5个等待周期(FLASH_ACR的LATENCY=5),否则Flash读取错误会导致随机延迟。其次,启用预取缓冲(PRFTEN=1)和指令缓存(ICEN=1),可减少顺序执行时的Flash访问次数,但注意预取对跳转和中断向量取指帮助有限。关键优化是:将中断服务函数(ISR)和频繁调用的关键代码放入CCM RAM(内核专用RAM,无总线竞争),通过链接脚本指定属性,避免Flash访问延迟。同时,确保中断向量表重映射到SRAM(通过SYSCFG_MEMRMP),减少向量取指延迟。此外,关闭不必要的时钟分频器(如AHB/APB预分频)以降低总线延迟,并考虑使用DMA传输中断相关数据,减少CPU介入。实测中,这些调整可将中断响应抖动从±20周期降至±3周期以内。建议用逻辑分析仪或定时器GPIO翻转测量实际抖动,迭代优化。
mcuku 阿沐 · 2026-08-27