void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); ///使能TIM2时钟 APB1 42M 定时器时钟2倍频即84M
TIM_TimeBaseInitStructure.TIM_Period = 999; //自动重装载值arr 定时器时钟84M,分频系数84,所以84M/84=1000Khz的计数频率,计数1000次为1ms
TIM_TimeBaseInitStructure.TIM_Prescaler = 83; //定时器分频psc
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//初始化TIM2
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许定时器2更新中断
TIM_Cmd(TIM2,ENABLE); //使能定时器2
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); //选择TRGO触发源为计时器更新时间 计数值为0时刻
//TIM2 系统1ms定时器中断配置
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;//这个数越小优先级越高 先占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET) //溢出中断
{
Bootloader1Ms();//系统1ms定时器函数
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位
}
|