江科大學(xué)習(xí)筆記 _4.定時(shí)器中斷配置
?

內(nèi)部時(shí)鐘計(jì)數(shù):
1.?RCC時(shí)鐘開(kāi)啟
Timer2掛載在APB1總線上
RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM2EN, ENABLE);
?
2.?選擇時(shí)基單元的時(shí)鐘源
TIM_InternalClockConfig(TIM2);
//Configures the TIMx internal Clock ?使用內(nèi)部時(shí)鐘源
如果不調(diào)用這個(gè)函數(shù),使用的也是內(nèi)部時(shí)鐘
?
3.?配置時(shí)基單元
????TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
????TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//濾波分頻
????TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
????TIM_TimeBaseInitStruct.TIM_Period = 10000 - 1;
????TIM_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1;
????TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
?
?TIM_ClearFlag(TIM2, TIM_FLAG_Update);//防止初始化完就進(jìn)中斷的問(wèn)題
?
4.?配置輸出中斷控制,允許更新中斷到輸出NVIC
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
?
?
5.?配置NVIC,打開(kāi)定時(shí)器同通道,優(yōu)先級(jí)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
????
????NVIC_InitTypeDef NVIC_InitStruct;
????NVIC_InitStruct.NVIC_IRQChannel = ?TIM2_IRQn;
????NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
????NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
????NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStruct);
?
6.?運(yùn)行控制
TIM_Cmd(TIM2,ENABLE);
?
?
中斷服務(wù)函數(shù)
void TIM2_IRQHandler(void)
{
????
????if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
????{
????????
????????Num++;
????????
????????TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
????}
}
?
?
?
?
?
?
?
?
?
?
?
?
?
?