guocai 发表于 2010-11-22 13:37:12

系统的延时问题

请问RTT的系统延时函数可不可以延到到微秒的?

pqpqppq 发表于 2010-11-22 14:21:30

俺自己写的微妙延时函数(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;
      }
    }
}

ffxz 发表于 2010-11-22 14:25:23

把RT_TICK_PER_SECOND配置成1000,可以做到近似1ms的延时。
页: [1]
查看完整版本: 系统的延时问题