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