Descripción general de las interrupciones externas
Cada IO de STM32 se puede utilizar como entrada de interrupción externa.
El controlador de interrupciones de STM32 admite 19 solicitudes de eventos/interrupciones externas:
Línea 0 ~ 15: Correspondiente a la interrupción de entrada del puerto IO externo.
Línea 16: Conectar a la salida PVD.
Línea 17: Conexión al evento de alarma RTC.
Línea 18: Conexión al evento de activación USB.
Cada línea de interrupción externa puede configurar de forma independiente el modo de disparo (flanco ascendente, flanco descendente o disparo de ambos flancos), disparo/enmascaramiento y bits de estado dedicados.
GPIOx.0 se asigna a EXTI0
GPIOx.1 se asigna a EXTI1
…
GPIOx.15 se asigna a EXTI15
Para cada línea de interrupción, podemos configurar el modo de disparo correspondiente (disparador de flanco ascendente, disparador de flanco descendente, disparador de flanco) y habilitarlo.
Se puede ver en la tabla que las líneas de interrupción externa 5 a 9 asignan un vector de interrupción y comparten una función de servicio. Las líneas de interrupción externas 10 a 15 asignan un vector de interrupción y comparten una función de servicio de interrupción.
Lista de funciones de servicio de interrupción:
Funciones de biblioteca comunes para usuarios externos de nivel medio:
① anular GPIO_EXTILineConfig (uint8_t GPIO_PortSource , uint8_t GPIO_PinSource );
// Establece la relación de mapeo entre el puerto IO y la línea de interrupción
exp: GPIO_EXTILineConfig (GPIO_PortSourceGPIOE,GPIO_PinSource2);
② anular EXTI_Init ( EXTI_InitTypeDef * EXTI_InitStruct );
// Inicializar línea de interrupción: método de activación, etc.
③ EstadoIT EXTI_GetITStatus (uint32_t EXTI_Line );
// Determinar el estado de interrupción de la línea de interrupción y si ocurre
④ anular EXTI_ClearITPendingBit (uint32_t EXTI_Line );
// Borra el bit de bandera de interrupción en la línea de interrupción
Función EXTI_Init
anular
EXTI_Init
(
EXTI_InitTypeDef
*
EXTI_InitStruct
);
estructura typedef
{
uint32_t EXTI_Line; //Especifica la línea de interrupción que se configurará
EXTIMode_TypeDef EXTI_Mode; //Modo: evento O interrupción
EXTITrigger_TypeDef EXTI_Trigger;//modo de disparo: flanco ascendente/flanco descendente/disparador de doble flanco
FunctionalState EXTI_LineCmd; //Habilitar O deshabilitar
} EXIT_InitTypeDef;
EXTI_InitStructure.EXTI_Line=EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = HABILITAR;
EXTI_Init(&EXTI_InitEstructura);
Pasos generales de configuración para interrupciones externas:
①Inicialice el puerto IO como entrada
.
GPIO_Init
();
②Habilite el
reloj
de multiplexación del puerto
IO
.
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
③Establezca
la relación de mapeo entre el puerto
IO
y la línea de interrupción.
vacío
GPIO_EXTILineConfig
();
④
Inicialice interrupciones en línea, establezca condiciones de activación, etc.
SALIR_Inicio
();
⑤
Configure la agrupación de interrupciones (
NVIC
) y habilite la interrupción.
NVIC_Init
();
⑥Función de servicio de interrupción de escritura.
EXTIx_IRQHandler
();
⑦Borre
el bit de bandera de interrupción
EXTI_ClearITPendingBit
();
Conexión de hardware de botones (versión élite)
Código real:
exti.c:
El rendimiento de descargar el programa a la placa es: presione el botón KEY0 y la marquesina cambiará una vez, como se muestra en la siguiente figura.