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. */