系统的延时问题
请问RTT的系统延时函数可不可以延到到微秒的? 俺自己写的微妙延时函数(72MHz时)供参考优点是很准。缺点是占用CPU过多。
/**
* @briefThis function handles us-Delay by reference SysTick register.
* @paramrt_uint32_t usNbr , < 10000 (us)
* @retval : None
*/
void IODelayus(rt_uint32_t usNbr)
{
RCC_ClocksTypeDefrcc_clocks;
rt_uint32_t i, cnto, cntn;
if(usNbr<3){
if(usNbr==1){
for(i=0;i<6;i++){
++cnto;//试验得出
}
}
else if(usNbr==2){
for(i=0;i<18;i++){
++cnto;//试验得出
}
}
return;
}
cnto = SysTick->VAL;
RCC_GetClocksFreq(&rcc_clocks);
i = (rt_uint32_t)rcc_clocks.HCLK_Frequency;
i=i/((rt_uint32_t)1000000);
i=i*usNbr-41;//扣除前边这些指令所花时间, 试验得出
while(1){
cntn = SysTick->VAL;
if(cntn>cnto){
cnto=cnto+(rt_uint32_t)0x1000000;//systick 回绕
}
if(cntn+i<cnto){
return;
}
}
} 把RT_TICK_PER_SECOND配置成1000,可以做到近似1ms的延时。
页:
[1]