这是我的主程序,程序目的是捕获TIM5 CH1和CH2两个高电平的时间差 改的是开发板例程,TIM5_NUM是捕获次数,当他为2时进行显示,TIM5_FLAG是初次捕获标志,我在中断程序中设置了每个通道中断后就
失能这个通道,在主程序中显示后才重新使能,为了消抖我还在显示程序中加了延时。但奇怪的是每次复位后LED0都会亮也就是说TIM5_NUM 总是自动等于1;求教大神怎么解决
while(1)
{
if(TIM5_NUM==2)
{
TIM5_FLAG=0;
TIM5_NUM=0;
LED1=0;
LCD_ShowxNum(320,200,TIM5CH1_CAPTURE_VAL,10,24,0);
LCD_ShowxNum(320,300,TIM5CH2_CAPTURE_VAL,10,24,0);
delay_ms(1000);
TIM_ITConfig(TIM5,TIM_IT_CC1|TIM_IT_CC2,ENABLE);
LED1=1;
}
if(TIM5_NUM==1)
{
LED0=0;
}
else
{
LED0=1;
}
}
这是中断函数
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)
{
if(TIM5_FLAG==0)
{
TIM5CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM5,0);
TIM5_FLAG=1;
}
else
{
TIM5CH1_CAPTURE_VAL=TIM_GetCounter(TIM5);
}
TIM5_NUM++;
TIM_ITConfig(TIM5,TIM_IT_CC1,DISABLE);
}
if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)
{
if(TIM5_FLAG==0)
{
TIM5CH2_CAPTURE_VAL=0;
TIM_SetCounter(TIM5,0);
TIM5_FLAG=1;
}else
{
TIM5CH2_CAPTURE_VAL=TIM_GetCounter(TIM5);
}
TIM5_NUM++;
TIM_ITConfig(TIM5,TIM_IT_CC2,DISABLE);
}
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4);
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
如果只是复位后执行中断也还好,关键是我调试发现,只要TIM_ITConfig(TIM5,TIM_IT_CC1|TIM_IT_CC2,ENABLE);执行以后,就有一个通道会自己触发中断
---------------------------------
是的,定时器就有这个毛病。。。
原子哥 那如何处理呢
忽略。
一周热门 更多>