|
發布時間: 2024-9-17 14:45
正文摘要:我在使用STM32F103RCT6做定時器中斷實驗的時候發現,當使用定時器5,6,7都不能觸發定時器中斷進入服務函數,但是使用定時器12348卻可以,配置完全一樣,按道理也不應該有區別才對呀,搞了一天也不知道為什么 |
|
可能原因分析 時鐘配置問題: 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); } |