在Cortex-M上用DWT->CYCCNT测函数耗时,核心是:1) 使能DWT:先置CoreDebug->DEMCR的TRCENA位,再置DWT->CTRL的CYCCNTENA位,部分内核(M0/M0+)无DWT需改用SysTick或定时器;2) 测量时先读一次CYCCNT存t0,调用目标函数,再读t1,周期数=t1-t0(无符号减法天然处理32位回绕);3) 换算时间:ns = cycles * 1e9 / SystemCoreClock,注意用64位运算避免溢出,或先算cycles*1000/f_MHz得ns;4) 精度校准:用已知周期的高精度信号(如GPIO翻转配合示波器、或定时器PWM输出)测N个周期,比较DWT读数与理论值,求比例误差并做补偿;同时注意CYCCNT在调试暂停时可能停走、中断会污染测量,测量区间应关中断或用多次取最小值。实测时建议循环调用取平均并剔除异常值。
mcuku 阿沐 · 2026-10-17