在STM32F4系列中,Flash零等待周期(0WS)仅在≤24MHz时生效,168MHz下通常需5个等待周期(ART加速器可优化顺序执行,但中断跳转仍可能触发重取)。精确测量方法:使用定时器输入捕获或DWT->CYCCNT(需使能DWT->CTRL的CYCCNTENA位),在中断服务函数入口读取CYCCNT值,与触发中断时的基线值相减,得到周期数(含硬件响应和Flash延迟)。补偿策略:1)将中断服务函数和向量表放入SRAM(如通过__attribute__((section(".sramfunc")))和SCB->VTOR重定位),消除Flash等待;2)若必须从Flash执行,预取关键中断代码到ICache(F4无ICache,需用ART的预取缓冲,确保代码顺序连续);3)软件补偿:在ISR入口插入空操作或调整优先级,但更推荐硬件优化。实操建议:用逻辑分析仪或示波器同步GPIO翻转,对比实测与理论值,校准DWT计数。
mcuku 阿沐 · 2026-08-27