大家好,我调试TIM1定时器时出现一个很奇怪的问题。我打算配置定时器,生成一个10KHz的PWM波,同时开启更新事件中断。在中断服务程序中,我做了一个软件计数器TIM1_BRK_UP_TRG_COM_IRQTicker,每次进中断都累加一次,当累加到10000时,另一个计数器i加1。在正常情况下,一个PWM周期会有两个更新事件,产生两个中断,中断周期应该为20KHz,i的累加周期应该为0.5s。但是在WatchWindow里观察,i刷新很快。在TIM1_BRK_UP_TRG_COM_IRQTicker++处加一个断点,发现每次进中断,TIM1->CNT只计数了26。以上现象让我百思不得其解。盼望哪位经验丰富的朋友能够帮我指出问题所在。多谢了! 代码如下: TIM1配置: void Tim1Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); DBGMCU_APB2PeriphConfig(DBGMCU_TIM1_STOP, ENABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_DeInit(TIM1); TIM_ARRPreloadConfig(TIM1,ENABLE); TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; TIM_TimeBaseStructure.TIM_Period = 2399;//ÐźÅƵÂÊ10KHz; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_Cmd(TIM1,ENABLE);//TIM1 counter enable TIM_ClearFlag(TIM1, TIM_FLAG_Update); TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); } 中断程序: void TIM1_BRK_UP_TRG_COM_IRQHandler(void) { TIM1_BRK_UP_TRG_COM_IRQTicker++; if(TIM1_BRK_UP_TRG_COM_IRQTicker == 10000) { i++; TIM1_BRK_UP_TRG_COM_IRQTicker = 0; } } |
评分
查看全部评分