可能原因分析
時鐘配置問題:
APB1/APB2時鐘使能: 確保定時器5、6、7所在的APB1時鐘已經正確使能。
時鐘源選擇: 檢查時鐘源是否正確選擇,尤其是對于不同組的定時器,時鐘源可能有所不同。
NVIC中斷配置問題:
中斷優先級: 確認定時器5、6、7對應中斷的優先級是否設置過高,導致被其他中斷搶占。
中斷分組: 檢查NVIC中斷分組是否正確,確保定時器中斷可以被正常響應。
試試下面的代碼看可行否?
void Timer5_Init(void) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 999; // 1000 - 1
TIM_TimeBaseInitStructure.TIM_Prescaler = 7199; // 7200 - 1
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseInitStructure);
TIM_ClearFlag(TIM5, TIM_FLAG_Update);
TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM5, ENABLE);
}
|