关于#stm32#的问题:用的是STM32F103RBT6板子,通过红外传感器触发中断实现避障过程中,设置的是下降沿触发,但是实际工作时上升沿和下降沿都进入中断了

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();
        
        
    }
}


希望捞一下。

可能是因为红外传感器输出的信号存在抖动或噪声,导致上升沿和下降沿都被检测到,从而触发了中断。为了解决这个问题,可以采取以下措施:

  1. 在中断服务函数中添加一定的延时,以确保信号稳定后再进行处理。

  2. 在中断触发前,对红外传感器输出的信号进行滤波处理,可以采用RC滤波器或者软件滤波的方式,去除抖动和噪声。

  3. 调整中断触发的阈值,使其在信号稳定后再进行触发。可以通过调整EXTI_InitTypeDef结构体中的EXTI_Trigger参数,来实现不同的触发方式。例如,改为EXTI_Trigger_Rising_Falling,则表示在上升沿和下降沿都触发中断。