Как обрабатывать ввод с нескольких кнопок, используя одно прерывание?

Интересно, как сделать обработчик IRQ, который может по-разному реагировать на нажатие каждой кнопки.

Я думаю сделать это следующим образом:

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

Я не знаю, как подключить несколько кнопок к одному прерыванию, и это моя худшая проблема:(

1 ответ

Решение

Это принцип. Я не слишком знаком с периферийными устройствами STD, но мне интересно, если EXTI_GetFlagStatus было бы лучше в вашем случае. Также не забудьте очистить флаг прерывания.

Ваш код должен выглядеть так:

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();
    }
}
Другие вопросы по тегам