Red de conocimiento informático - Material del sitio web - Cómo usar stm32 para implementar la función de clic de expansión de interrupción

Cómo usar stm32 para implementar la función de clic de expansión de interrupción

El controlador externo de interrupción/evento consta de 19 detectores de borde que generan solicitudes de evento/interrupción. Cada línea de entrada se puede configurar de forma independiente.

Tipo de entrada (pulso o pausa) y evento de disparo correspondiente (flanco ascendente o flanco descendente o ambos disparos por flanco). Cada línea de entrada se puede aislar

Apantallado verticalmente. El registro pendiente contiene la solicitud de interrupción para la línea de estado.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

19 Las interrupciones son las siguientes:

17-La línea EXTI 16 se conecta a la salida PVD.

18——La línea EXTI 17 está conectada al evento de alarma RTC.

19-La línea EXTI 18 está conectada al evento de activación USB.

Nota: Como se puede ver en la figura anterior, los pines conectados a EXTI0 son PA0, PB0, PC0, PD0, PE0, PF0 y PG0, y otras interrupciones externas son Exti1-

EXTI15 Más o menos lo mismo. Por lo tanto, cuando lo utilice, intente configurar las interrupciones externas requeridas en diferentes EXTIx.

Por ejemplo, si se requieren tres interrupciones externas, podemos configurarlas en PA0, PB4 y PG3. En este punto, cada interrupción tiene su propio controlador de interrupciones.

Prólogo Si se configura como PA0, PB0 y PC1, PA0 y PB0 compartirán un segmento de interrupción. Por supuesto, si tienes necesidades especiales, también puedes diseñarlo de esta manera.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Configuración y uso:

Inicialice el pin GPIO correspondiente para configurar la fuente de interrupción externa. La fuente de interrupción está conectada al GPIO y el controlador de interrupciones se escribe para la fuente de interrupción correspondiente.

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Código de programa

Inicializa el pin GPIO correspondiente.

GPIO _ init typedef GPIO _ estructura init;

RCC _ APB 2 periphclock cmd(RCC _ APB 2 periph _ AFIO, habilitar

RCC _); APB 2 periphclockcmd(RCC _ APB 2 periph _ GPIOE, habilitar);

RCC _ APB 2 periphclockcmd (RCC _ APB 2 periph _ gpio b, habilitar

GPIO_InitStructure). GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;

GPIO_InitStructure. GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.

GPIO_Speed ​​​​= GPIO_Speed_50MHz

GPIO_Init(GPIOE amp; estructura GPIO_init);

GPIO_InitStructure. GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;

GPIO_InitStructure. GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure. GPIO _ Velocidad = GPIO _ Velocidad _ 50MHz

GPIO _ Init(GPIOB amp; GPIO _ estructura init);

Nota: La función de multiplexación de GPIO debe estar activada encendido, como la parte roja.

Configure la fuente de interrupción externa y use GPIO para conectar la fuente de interrupción.

GPIO _ configuración extiline (GPIO _ PortSourceGPIOE, GPIO _ fuente de pin 0);

GPIO _ configuración de extiline (GPIO _ PortSourceGPIOE, GPIO _ fuente de pin

);

GPIO_ configuración extiline (GPIO_PortSourceGPIOB, GPIO_pin fuente 8);

GPIO_ configuración extiline (GPIO_PortSourceGPIOB, GPIO_pin fuente 9);

EXTI_InitStructure. EXTI_Line = EXTI_Line 0 | EXTI_Line 1 | EXTI_Line 8 | EXTI_Line 9;

EXTI_InitStructure. EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure. EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure. EXTI _ LineCmd = ENABLE

EXTI_Init(amp;estructura EXTI_init);

Escribe un controlador de interrupciones para la fuente de interrupción correspondiente.

void EXTI0_IRQHandler(void)

{

if(Sys _ Status gt; estado mínimo)

{

sys_Status-;

}

EXTI_ClearITPendingBit(EXTI_line 0);

}

void exti 1 _ Controlador IRQ(void)

{

PEout(2)= ~ PEout(2);

EXTI _ ClearITPendingBit(EXTI _ línea 1);

}

# define Exti_From_pin 8 0x 00000100

# define Exti_From_pin 9 0x 00000200

void EXTI9_5_IRQHandler (void)

{

u32 Temp = 0x00

PEout(2)= ~ PEout(2);

temp = EXTI - gt PR; /Se lee la interrupción de ese pin.

Interruptor (temperatura)

{

caseExti_From_Pin8:

EXTI_ClearITPendingBit(EXTI_line 8);

Romper;

caseExti_From_Pin9:

if(Sys_Status lt;MAX_STATUS)

{

sys_status;

p>

}

EXTI _ ClearITPendingBit(EXTI _ línea 9);

Descanso

Predeterminado: descanso

}

}

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

El controlador de interrupciones muestra que debido a que las interrupciones externas EXTI5-EXTI9 comparten una interrupción (Exti10-Exti15 son similares), es necesario

Distinguir diferentes fuentes de interrupción requiere el juicio correspondiente. Como en EXTI9_5_IRQHandler anterior, la fuente de la interrupción se registra ante el juez leyendo EXTI->PR.