LL库定时器配置不准问题请教,程序如下,实际用示波器测出来的定时时间值为960ms(测试时发现:如果 LL_TIM_InitStruct.Prescaler = 20时,计时正常的1s,但是改成200,计时又不是准确的10s,实测9秒多),看到这个贴的麻烦看看哪里出了问题?先谢谢了!
//初始化
void Configure_TIMTimeBase(void)
{
LL_TIM_InitTypeDef LL_TIM_InitStruct = {0};
/* Enable the timer peripheral clock */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
LL_TIM_InitStruct.Prescaler = 19;
LL_TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
LL_TIM_InitStruct.Autoreload = 9999;
LL_TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM2, &LL_TIM_InitStruct);
LL_TIM_DisableARRPreload(TIM2);
LL_TIM_SetClockSource(TIM2,LL_TIM_CLOCKSOURCE_INTERNAL);
LL_TIM_SetTriggerOutput(TIM2,LL_TIM_TRGO_RESET);
LL_TIM_DisableMasterSlaveMode(TIM2);
/* Configure the NVIC to handle TIM2 update interrupt */
NVIC_SetPriority(TIM2_IRQn, 0);
NVIC_EnableIRQ(TIM2_IRQn);
LL_TIM_EnableIT_UPDATE(TIM2);
LL_TIM_EnableCounter(TIM2);
}
//中断
void TIM2_IRQHandler(void)
{
static uint8_t cntSysTick=0;
if(LL_TIM_IsActiveFlag_UPDATE(TIM2) != RESET)
{
/* Clear the update interrupt flag*/
LL_TIM_ClearFlag_UPDATE(TIM2);
cntSysTick++;
if(cntSysTick >= 10)
{
cntSysTick -= 10;
tim2_flag=1;
}
}
}
//主函数
int main(void)
{
SystemClock_Config(); //2M系统时钟频率
SysTick_Config(SystemCoreClock / 1000);
Configure_TIMTimeBase();
while (1)
{
if(tim2_flag==1) //想实现1秒置位一次
{
tim2_flag=0;
LL_GPIO_TogglePin(GPIOA,LL_GPIO_PIN_3);//翻转
}
|