可能原因分析
时钟配置问题:
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);
}
|