在做作业时需要用到一个通用定时器计时,于是选用TIM3,配置函数如下:
void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Prescaler=36000-1; //时钟频率=72M/(Prescaler+1)=2000,一秒计数2000次
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period=2000; //自动重装寄存器的值,经计数Period次后发生一次中断
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //使能TIM3中断源中断
TIM_Cmd(TIM3,ENABLE); //使能TIM3外设
}
中断函数为:
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)//判断是否为定时器3溢出中断
{
count_time++;
}
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //清中断标记
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); // 清除TIMx的待中断处理位
}
系统时钟已经设为72M,本来想让TIM3每一秒产生一次中断,然后count_time加1,但实际count_time大概加到280时实际时间才过1秒,这是什么原因呢?求解! |