#include 'stm32f4xx.h' #include 'usart.h'

void exti_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource1); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource2); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource4); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource0); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource3); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource7);

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =4; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =4; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =4; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority =1; //子优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化NVIC寄存器

EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line2|EXTI_Line4|EXTI_Line3|EXTI_Line7; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //PF(1)/PF(2)/默认设置为上拉,按键按下为下降沿 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); }

这段代码是用来初始化外部中断的。其中包括配置外部中断的触发方式和优先级,并使能相关中断。同时,也配置了对应的GPIO口和引脚。

具体来说,代码中使用了EXTI_InitTypeDef结构体来配置外部中断,其中包括了EXTI_Line、EXTI_Mode、EXTI_Trigger和EXTI_LineCmd等参数。NVIC_InitTypeDef结构体则用来配置中断优先级和使能中断。SYSCFG_EXTILineConfig函数则用来配置GPIO口和引脚。

总的来说,这段代码的作用是初始化外部中断,使它们能够正常工作,并能够响应相应的触发方式和优先级。

STM32F4xx 外部中断初始化代码解析

原文地址: https://www.cveoy.top/t/topic/n7Kw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录