分享一种利用Cortex内核自带的DWT计数器实现us延时的方法,采用时钟摘取法实现us延时
[C] 纯文本查看 复制代码 void delay_us(volatile uint32_t nus){
volatile uint32_t told=DWT->CYCCNT,tnow,tcnt=0; //刚进入时的计数器值
volatile uint32_t ticks=nus*(SystemCoreClock/1000000);//需要的节拍数
do{
tnow=DWT->CYCCNT;
tcnt+=tnow-told;
told=tnow;
}while(tcnt<ticks);
}
该函数在调用前需要开启DWT,代码如下:
[C] 纯文本查看 复制代码 void DWT_Init(void){
CoreDebug->DEMCR|=CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT=0;
DWT->CTRL|=DWT_CTRL_CYCCNTENA_Msk;
}
|