Red de conocimiento informático - Problemas con los teléfonos móviles - Requisitos de programación de interrupciones stm32: 2 interrupciones, 2 prioridades, 2 funciones de inicialización

Requisitos de programación de interrupciones stm32: 2 interrupciones, 2 prioridades, 2 funciones de inicialización

Estudiante, su pregunta debe determinarse de acuerdo con la situación real

Por ejemplo, si usamos interrupciones externas, explicaré los pasos generales para usar interrupciones externas según la mía. aprendizaje:

p>

1. Inicialice el puerto GPIO correspondiente. Si estamos usando GPIOB.

(1) Primero defina el nombre de la estructura utilizada para la inicialización.

GPIO_InitTypeDef GPIO_InitStructure;

Explicación: GPIO_InitTypeDef es una estructura definida para nosotros por stm32, que tiene las variables miembro correspondientes. Solo necesitamos definir el nombre de la estructura, que es GPIO_InitStructure. y luego configurar sus miembros.

(2) Enciende el reloj GPIOB.

Para encender el reloj utilizamos las buenas funciones que nos proporciona el sistema

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);

Nota: Porque queremos para reutilizar el puerto GPIO, por lo que el reloj de función multiplex RCC_APB2Periph_AFIO del puerto GPIO también debe estar activado;

(3) Estructura de configuración GPIO_InitStructure.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //Seleccione el pin

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_IPU //Establezca el modo de salida Para cambiar el modo, el pin stm32 se eleva internamente. para garantizar que sea de alto nivel y se utilice como pin de entrada.

(4) No necesitamos configurar la velocidad de entrada en este paso. Cuando se utiliza el puerto GPIO para la entrada, no es necesario configurar la velocidad

GPIO_InitStructure. GPIO_Speed ​​​​= GPIO_Speed_2MHz;

(5) GPIO_Init(GPIOB, amp; GPIO_InitStructure); //Llame a la función de inicialización para aplicar la configuración al puerto GPIOB.

2. Conecte GPIO a EXTI

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); // Conecte el puerto GPIOB0 a EXTI0. Es posible que algunos estudiantes no entiendan por qué es EXTI0. Por favor explique que si el puerto GPIO está conectado al pin 0, corresponde a EXTI0, y si es al pin 1, corresponde a EXTI1.

3. Configurar el modo de disparo de interrupciones externas

EXTI_InitTypeDef EXTI_InitStructure;

EXTI_InitStructure.EXTI_Line=EXTI_Line0;

EXTI_InitStructure.EXTI_Mode= EXTI_Mode_Interrupt ;

EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd=ENABLE;

EXTI_Init(y EXTI_InitStructure);

4 Establezca el registro de prioridad de interrupción

NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2); //Aquí elegimos el grupo 2, lo que significa asignar dos bits a la prioridad de preferencia y dos bits a la prioridad de respuesta

5. Configurar el registro de control de interrupciones (NVIC)

(1)NVIC_InitTypeDef NVIC_InitStructure; //Este paso es nombrar nuestra estructura. Lo siguiente es configurar la estructura.

(2) NVIC_InitStructure. .NVIC_IRQChannel=EXTI0_IRQn; // Seleccione el tipo de interrupción y seleccione la interrupción externa 0. Estas declaraciones en realidad nos las proporciona stm32. El nombre de la interrupción se define para nosotros en la estructura IRQn_Type. Solo necesitamos seleccionar la interrupción que queremos usar. Bien, podemos encontrarlo en stm32f10xx.h.

(3)NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01 //Establece la prioridad de preferencia.

(4)NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01; //Establece la prioridad de respuesta.

(5)NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE //Configurar para habilitar la interrupción. Puede entenderse como activar la interrupción total.

(6) NVIC_Init (amp; NVIC_InitStructure); //Llame a la función de reemplazo de eventos para inicializar la interrupción.

6. No olvide escribir la rutina del servicio de interrupción en stm32f10x_it.c. No olvide borrar el indicador de interrupción.

void PPP_IRQHandler(void)

{}

Escribimos el programa de interrupción en esta función, PPP significa dispositivo. Pero los estudiantes deben recordar que no podemos escribir directamente en él. Necesitamos escribir PPP como nuestro puerto de interrupción, void EXTI0_IRQHandler (void) {}

Eso es todo. Los compañeros volverán a preguntar cómo determinar esto. ¿nombre?

La respuesta es que tenemos que buscar el nombre correspondiente a cada interrupción en el archivo ensamblador del archivo de inicio stm32 startup_stm32f1xx.s.

Aprende poco a poco, no es tan difícil como creemos