void TIMER_Mode1_Configuration()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=2000; //ARR的值
TIM_TimeBaseStructure.TIM_Prescaler=36000-1; //预分频=(APB1/频率值)-1
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许更新产生中断
TIM_Cmd(TIM2, ENABLE); //开启时钟
}
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2,TIM_IT_Update)!=0)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标记
LED2=!LED2; //灯的开关
}
}
说明:定时器由内部时钟(APB1=36MHz)提供,因为定时器无论在APB1还是APB2最大频率都是
72MHz。当前程序定时器为72MHz,由于分频后72M/36000=2k;ARR预装载值为2000;这样刚
好为1秒,因为计数器从0计数到2000需要2k。
此时,当计数器从0计数到2000时(时经1秒)产生中断,在中断函数中执行LED会发亮或是熄灭。