TIM1更新事件中断过快的问题
大家好,我调试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_TimeBaseInitTypeDefTIM_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;
}
}
写的真好啊 ,简单易懂 谢谢分享 不知道你的系统时钟和定时器时钟 问题已解决:需要在中断里先判断是哪种中断,最后要清中断标志!奇怪,为什么跟别的芯片不一样,还要判断是哪种中断?
页:
[1]