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时钟和代码的原因导致,在可接受范围内)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这是分频17, 1us的分频是LL_TIM_SetPrescaler(TIM2, 15);
我觉得, 原子提供的函式就很好了, 应该不用再自己做了.
一周热门 更多>