要降低STM32F4在168MHz下的中断延迟抖动,核心是确保CPU取指不因Flash访问冲突而随机停顿。首先,必须将Flash等待周期设为5个(对应168MHz,参考手册Table 5),这是硬性要求,否则会触发总线错误或数据损坏。其次,启用预取缓冲区(FLASH_ACR的PRFTEN位),并建议同时开启指令缓存(ICEN)和数据缓存(DCEN),但注意DCEN需谨慎,若中断处理函数访问DMA写入的共享数据,可能读到陈旧值,反而增加抖动。实操建议:将中断服务函数和其调用的关键函数放入RAM执行(如__attribute__((section(".ramfunc")))),彻底避开Flash延迟;同时,在启动代码中先配置FLASH_ACR再初始化时钟,避免时序竞争。最后,测量抖动时用逻辑分析仪抓GPIO翻转,对比开启/关闭预取和缓存的实际效果,因为Cortex-M4的取指单元有分支预测,实际抖动受代码布局影响。若追求极致,可考虑将中断向量表重映射到SRAM(通过VTOR),减少向量读取的Flash访问。
mcuku 阿沐 · 2026-08-27