Los puertos de E / S en el STM32F10x están organizados en 7 grupos de 16, designados como PA0, PA1, ... PA15, PB0, ... hasta PG15. Normalmente, solo un subconjunto de estos se lleva a los pines.
Para desencadenar una interrupción, se debe configurar un puerto en el modo de entrada.
PAx, PBx, ... PGx (x = 0..15) se mezclan en la línea de interrupción externa x, por lo que solo uno de estos puertos controla la línea x. Ese puerto se selecciona mediante el campo de bit EXTIx en el registro AFIO_EXTICRy (y = 1..4). Los otros puertos en la línea x se ignoran en lo que respecta a las interrupciones externas.
La línea x se desenmascara al escribir un '1' en el bit apropiado en el registro EXTI_IMR, y se selecciona el activador de flanco ascendente y / o descendente en los registros EXTI_RTSR y EXTI_FTSR.
Por ejemplo, para que haya una interrupción externa en PC4 en aumento, configure los bits EXTI4 en el registro AFIO_EXTICR2 en (binario) 0010 para seleccionar el puerto PC4. Escriba un '1' en el bit MR4 en EXTI_IMR para habilitar la Línea 4, y en TR4 en EXTI_RTSR para seleccionar el flanco ascendente. (En este caso, PA4, PB4 y PD4-PG4 no están disponibles como fuentes de interrupción externas).
El registro EXTI_PR se puede leer para determinar qué líneas tienen interrupciones pendientes.
El NVIC debe estar configurado para aceptar y procesar la solicitud de interrupción. Las interrupciones externas de 0 a 4 tienen vectores de interrupción individuales, pero de 5 a 9 comparten un vector, al igual que de 10 a 15.