定时中断配置过程
1.RCC开启时钟( TIM2是挂载在APB1总线上)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
2.内部时钟配置
TIM_InternalClockConfig(TIM2);
3.时基单元配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision=1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period=1000-1;
TIM_TimeBaseInitStructure.TIM_Prescaler=7200-1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
时基单元包含:
● 计数器寄存器
(TIMx_CNT)
● 预分频器寄存器
(TIMx_PSC)
● 自动装载寄存器
(TIMx_ARR)
计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)
4.开启TIM中断
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
5.配置NVIC
NVIC_PriorityGroupConfig(2);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStructure);
6.启动定时器
TIM_Cmd(TIM2,ENABLE);
7.配置中断函数
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)
{
num++;
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
}
每秒自动加一