STM32L0 求一个LL库或寄存器的 us延时代码

2019-07-20 02:32发布

void  Configure_TIMTimeBase(void)
{
    uint32_t v;
//TIM2使用的时钟为HSI 16MHz(AHB,APB1总线未分频)
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
  LL_TIM_SetPrescaler(TIM2, 16);
  LL_TIM_SetCounterMode(TIM2,LL_TIM_COUNTERMODE_DOWN);     
}


void  DelayUs(uint16_t us)
{      
    LL_TIM_SetCounter(TIM2,us);   
    LL_TIM_EnableCounter(TIM2);   
    while( LL_TIM_IsEnabledCounter(TIM2) && !LL_TIM_IsActiveFlag_UPDATE(TIM2))
    {
    }   
    LL_TIM_ClearFlag_UPDATE(TIM2);
    LL_TIM_DisableCounter(TIM2);   
}
延时误差相当大,延时越长误差越大。没搞懂原因. 2ms  误差0.14ms (140us)。
用SYSTICK定时器精度正常,误差一直在14us左右(由于HSI是RC时钟和代码的原因导致,在可接受范围内)




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。