Search code examples
interrupt-handlingstm32f4coocox

How to handle input from multiple buttons using one interrupt?


I wonder how to make IRQ handler, which can react differently on pushing each button.

I'm thinking to do that in this way:

void EXTI9_5_IRQHandler(){
    if (EXTI_GetITStatus(EXTI_Line_5)){
        doThis();
    } else if (EXTI_GetITStatus(EXTI_Line_6)) {
        doThat();
    }
}

I don't know how to connect multiple buttons to one interrupt, and this is my worst problem :(


Solution

  • That is the principle. I am not too familiar with std peripherals, but I am wondering if EXTI_GetFlagStatus would be better in your case. Also don't forget to clear the interrupt flag.

    Your code should look like:

    void EXTI9_5_IRQHandler(){
        if (EXTI_GetITStatus(EXTI_Line_5)){
            EXTI_ClearFlag(EXTI_Line_5);
            doThis();
        } else if (EXTI_GetITStatus(EXTI_Line_6)) {
            EXTI_ClearFlag(EXTI_Line_6);
            doThat();
        }
    }