This is just a quick note to self. Remember, never try and clear the flag that caused the interrupt as the last instruction in the ISR itself. It causes the ISR to reenter immediately. Your ISR/NVIC/EXTI interrupt will retrigger, trigger twice, whatever keyword you were searching for.
void exti9_5_isr(void) { state.my_counter++; exti_reset_request(EXTI5); // Will cause a double interrupt } |
It’s just a matter of doing it first.
void exti9_5_isr(void) { exti_reset_request(EXTI5); // This will work state.my_counter++; } |
Code examples are based on libopencm3, but the same concept applies when using StdPeriphLib