新手上路
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2019-4-13
- 在线时间
- 6 小时
|
1金钱
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时钟和代码的原因导致,在可接受范围内)
|
最佳答案
查看完整内容[请看2#楼]
LL_TIM_SetPrescaler(TIM2, 16);
这是分频17, 1us的分频是LL_TIM_SetPrescaler(TIM2, 15);
|