本文主要是介绍STM32配置EXTI外部中断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如何配置EXTI外部中断
第一步:配置RCC,将涉及到的外设的时钟都打开
第二步:配置GPIO,选择端口为输入模式
第三步:配置AFIO,选择用到的GPIO,连接到后面的EXTI
第四步:配置ETXI,选择边沿触发方式,比如边沿触发方式,比如上升沿、下降沿或者双边沿。还需选择触发响应方式,可以选择中断响应和事件响应。
第五步:配置NVIC,给中断选择一个合适的优先级。最后通过NVIC,外部中断信号就能进入CPU(NVIC是内核外设不需要开启时钟)
以下是通过代码配置的EXTI外部中断(以PB14引脚为例)
第一步配置RCC时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
第二步配置GPIO:
GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);
第三步配置AFIO:
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
第四步配置EXTI:
EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line14;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);
第五步配置NVIC:
NVIC_PriorityGroupConfig();//这个函数是配置优先级分组:先占优先级和从占优先级。先占优先级即抢占优先级,从占优先级即响应优先级。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);
中断函数的编写:
void EXTI15_10_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line14) == SET){/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0){CountSensor_Count ++;}EXTI_ClearITPendingBit(EXTI_Line14);}
}//中断程序结束后,一定要再调用一下清楚中断标志位的函数
这篇关于STM32配置EXTI外部中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!