在Cortex-M上用DWT->CYCCNT测代码段耗时,关键是先使能DWT:CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CYCCNT=0; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk。测量时读两次CYCCNT做差,再除以系统主频换算成纳秒。注意CYCCNT是32位,主频168MHz时约25.5秒回绕,长段测量需处理溢出。误差主要来自:读取指令本身有开销(约几个周期),建议用__NOP()对齐或多次测量取平均;中断会插入额外周期,测量期间应关中断或统计中断次数;编译器优化可能重排读取顺序,读取处加__DSB()或volatile屏障。校准方法:用已知周期数的空循环(如N次__NOP())测出基准值,扣除读取开销;也可用GPIO翻转配合示波器交叉验证。注意部分低端Cortex-M0/M0+无DWT CYCCNT,需改用SysTick或定时器。