STM32中断触发问题
用的是STM32F103RBT6板子,通过红外传感器触发中断实现避障过程中,设置的是下降沿触发,但是实际工作时上升沿和下降沿都进入中断了。这是为啥??
这是EXTI设置,下降沿触发中断
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line5;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
然后清除标志位的代码也提前了。。
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line5) == SET)
{
EXTI_ClearITPendingBit(EXTI_Line5);
LED_ON();
Delay_ms(500);
LED_OFF();
}
}
希望捞一下。
可能是因为红外传感器输出的信号存在抖动或噪声,导致上升沿和下降沿都被检测到,从而触发了中断。为了解决这个问题,可以采取以下措施:
在中断服务函数中添加一定的延时,以确保信号稳定后再进行处理。
在中断触发前,对红外传感器输出的信号进行滤波处理,可以采用RC滤波器或者软件滤波的方式,去除抖动和噪声。
调整中断触发的阈值,使其在信号稳定后再进行触发。可以通过调整EXTI_InitTypeDef结构体中的EXTI_Trigger参数,来实现不同的触发方式。例如,改为EXTI_Trigger_Rising_Falling,则表示在上升沿和下降沿都触发中断。