在STM32F4上,利用DWT(Data Watchpoint and Trace)单元中的CYCCNT计数器可以实现高精度微秒延时,且不占用定时器资源。首先,需启用DWT:通过CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk,然后复位并使能CYCCNT:DWT->CYCCNT = 0; DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk。延时函数基于系统时钟(如168MHz),计算所需周期数:cycles = (uint32_t)(us * (SystemCoreClock / 1000000))。延时实现为:uint32_t start = DWT->CYCCNT; while ((DWT->CYCCNT - start) < cycles); 注意使用无符号减法避免溢出。建议在初始化时调用DWT_Init(),并确保在中断中慎用,因为CYCCNT会受调试暂停影响。此方法精度可达1个时钟周期,适合微秒级延时,且不占用任何外设定时器。
mcuku 阿沐 · 2026-08-27