STM32上升和下降按钮中断检测

时间:2014-09-19 10:54:42

标签: events stm32 interruptions

我有按钮中断:

    void EXTI0_IRQHandler(void)
    {
        if (EXTI_GetITStatus(EXTI_Line0) != RESET){

            if (/* BUTTON IS RELEASED */) {
                /* do something */          
            }
            if (/* BUTTON IS PRESSED */) {
                /* do something else */
            }
        EXTI_ClearITPendingBit(EXTI_Line0);
        }

    }

有可能检查一下吗?

3 个答案:

答案 0 :(得分:4)

是的,这是可能的。您必须将EXTI触发方式设置为EXTI_Trigger_Rising_Falling。因此STM32在上升和下降边缘时输入ISR。在ISR中,您可以控制GPIO引脚。如果GPIOPın置位,它必须是上升沿,否则它必须是下降沿。

void EXTI0_IRQHandler(void)
{
    if (EXTI_GetITStatus(EXTI_Line0) != RESET){

        if (PIN==1) {//Rising so pressed
            /* do something */          
        }
        if (PIN==0) {Falling so released
            /* do something else */
        }
    EXTI_ClearITPendingBit(EXTI_Line0);
    }

}

注意:上面的表现正常,下拉连接到按钮。随着上拉,上升和下降将被反转。

答案 1 :(得分:0)

是的。对于手动按下按钮的检测,您的代码应该可以正常工作。 对于某些关键信号检测,边缘和检查之间的间隔可能有意义。

答案 2 :(得分:-1)

1。)EXTI设置为EXTI_Trigger_Rising_Falling。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ //interrupt handler
    if(GPIO_Pin == GPIO_PIN_4){ //check interrupt for specific pin              
        if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)){ //check pin state 
            /* do something */
        }
        
        if(!HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)){
            /* do something */
        }
    }
}

    if((GPIOE -> IDR & GPIO_PIN_4)){ //IF STATUS PIN is HIGH
        /* do something */
    }
    if(!(GPIOE -> IDR & GPIO_PIN_4)){ //IF STATUS PIN is LOW
        /* do something */
    }