|
发表于 2010-11-22 14:21:30
|
显示全部楼层
俺自己写的微妙延时函数(72MHz时)供参考
优点是很准。缺点是占用CPU过多。
/**
* @brief This function handles us-Delay by reference SysTick register.
* @param rt_uint32_t usNbr , < 10000 (us)
* @retval : None
*/
void IODelayus(rt_uint32_t usNbr)
{
RCC_ClocksTypeDef rcc_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;
}
}
} |
|