EXTI(STM32)

📅 2026/6/28 11:17:24
EXTI(STM32)
一、GPIO常见函数349复位gpio350复位AFIO351gpio初始化结构体变量352给结构体变量赋予默认值353-356gpio读取输入359写入gpio的某一个端口360对整个gpio写入、//361锁定gpio配置放置更改以下是AFIO//362-363配置afio事件功能364afio引脚重映射365配置afio选择想要的引脚//366以太网GPIO_InitStructure.GPIO_Mode//gpio模式GPIO_InitStructure.GPIO_Pin//哪一个引脚GPIO_InitStructure.GPIO_Speed//输出速度二、EXTI常见函数158复位EXTI159对 EXTI 进行初始化160给 EXTI 结构体赋予默认值161产生一次 EXTI 中断162读取标志位163清除标志位164读取中断标志位165清除中断标志位EXTI_InitStructure.EXTI_Line//配置哪一个引脚是中断EXTI_InitStructure.EXTI_LineCmd//是否开启EXTI_InitStructure.EXTI_Mode//选择中断模式或者事件模式EXTI_InitStructure.EXTI_Trigger//中断触发方式是上升下降双边三、NVIC常见函数196配置中断分组197初始化nvic//198设置中断向量表//199系统低功耗配置NVIC_InitStructure.NVIC_IRQChannel//指定中断通道NVIC_InitStructure.NVIC_IRQChannelCmd//是否开启NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority//设置抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority//设计响应优先级四、配置EXTI中断配置EXTI外部中断详细步骤1.配置GPIO2.配置AFIOAFIO选择哪一个通道片选3.配置EXTI4.配置NVICRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/*配置GPIO*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU;GPIO_InitStructure.GPIO_PinGPIO_Pin_14;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure/*配置AFIO*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//AFIO将GPIOB的14引脚设置为中断/*配置EXTI*/EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_LineEXTI_Line14 ;EXTI_InitStructure.EXTI_LineCmdENABLE;EXTI_InitStructure.EXTI_ModeEXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_TriggerEXTI_Trigger_Falling;EXTI_Init(EXTI_InitStructure);/*配置NVIC中断分组*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/*配置NVIC*/NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannelEXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority1;NVIC_InitStructure.NVIC_IRQChannelSubPriority1;NVIC_Init(NVIC_InitStructure);中断函数根据EXTI的配置将GPIOB14配置为中断EXTI14当GPIOB14产生下降沿时触发一下中断void EXTI15_10_IRQHandler(void)//中断开始函数在strat里面{if (EXTI_GetITStatus(EXTI_Line14) SET)//当中断标志位挂起时候触发if{Delay_ms(500);CountSensor_Count ;EXTI_ClearITPendingBit(EXTI_Line14);//使用完中断函数必须清理不然会一直循环}}