Cómo usar stm32 para implementar la función de clic de expansión de interrupción
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.