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); //清除中斷標志位
}
|