[Registro de aprendizaje] Experimento de interrupción externa STM32

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.

 

Supongo que te gusta

Origin blog.csdn.net/weixin_47723114/article/details/127596024
Recomendado
Clasificación