使用的是M0内核的芯片,没有DWT,定时器方法也不能使用,无法驱动一些靠硬件协议的传感器。
void delay_us(uint32_t nus) { uint32_t ticks; uint32_t told,tnow,reload,tcnt=0; reload = SysTick->LOAD; //获取重装载寄存器值 ticks = nus * (SystemCoreClock / 1000000); //计数时间值 括号里的代表1us秒嘀嗒定时器的value会向下降多少值 told=SysTick->VAL; //获取当前数值寄存器值(开始时数值) while(1) { tnow=SysTick->VAL; //获取当前数值寄存器值 if(tnow!=told) //当前值不等于开始值说明已在计数 { if(tnow<told) //当前值小于开始数值,说明未计到0 tcnt+=told-tnow; //计数值=开始值-当前值 else //当前值大于开始数值,说明已计到0并重新计数 tcnt+=reload-tnow+told; //计数值=重装载值-当前值+开始值 (已 //从开始值计到0) told=tnow; //更新开始值 if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出. } } }
有人使用的是滴答定时器,试验了下可行,故此记录一下。有没有别的方法,求教