| 0..15 | EXTI lines 0..15 correspond to the GPIO pins 0..15 |
| 16 | PVD interrupt |
| 17 | RTC Alarm A & B interrupt |
| 18 | USB OTG FS interrupt |
| 19 | Ethernet wakeup |
| 20 | USB OTG HS interrupt |
| 21 | Tamper & time stamp interrupt |
| 22 | RTC wakeup interrupt |
Select the source input for EXTI
| EXTIx | 0000 | GPIOA pin x (reset state) |
| 0001 | GPIOB pin x | |
| … | ||
| 1010 | GPIOK pin x |
| MRx | 0 | Interrupt request for EXTI line x masked (reset state) |
| 1 | Interrupt request for EXTI line x unmasked |
| PRx* | 0 | No trigger request occurred |
| 1 | Selected trigger request occured |
* This bit is set when the selected edge event arrives on the external interrupt line x. This bis is cleared by programming it to '1'
#include "reg_stm32f4xx.h" RCC->AHB1ENR |= (0x1 << 0u); /* Enable GPIOA clock */ /* Configure GPIO pin A.5 as input. */ GPIOA->MODER &= ~(0x3 << 10u); /* Clear existing mode bits 10 and 11. */ GPIOA->PUPDR &= ~(0x3 << 10u); /* Clear existing pull-up/-down bits 10 and 11. */ GPIOA->PUPDR |= (0x1 << 10u); /* Set pin 5 to pull-up mode. */
To choose which GPIO peripheral should trigger EXTI line 5 you have to configure the SYSCFG register.
#include "reg_stm32f4xx.h" SYSCFG->EXTICR2 |= (0u << 4u); /* Set EXTI5 to GPIOA. */
#include "reg_stm32f4xx.h" EXTI->RTSR |= (0x1 << 5u); /* Trigger on rising edge. */ EXTI->IMR |= (0x1 << 5u); /* Unmask interrupt line. */
#include "reg_stm32f4xx.h" NVIC->ISER0 |= (0x1 << 23u); /* Enable EXTI5 interrupt. */