1.根据EXTI简单结构图写代码
首先对所需要的外设进行通电,使用RCC函数,EXTI和NVIC不需进行操作
主要使AFIO选择你使用的GPIO口,这里使用的使Pin14端口,所以AFIO也选择的14中断输出口
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
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);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//定义AFIO选择B14中断
然后配置EXTI
EXTI_InitStructure.EXTI_Line=EXTI_Line14;//PB14中断线路
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_PriorityGroup_2);//选择第二组分组,两位抢占优先级,两位响应优先级
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);
选择中断第二组分组, 两位抢占优先级,两位响应优先级
两个优先级的值选择图表
配置好初始化函数,现在配置中断函数,每一个中断源都有自己的固定中断函数名
我们使用 EXTI15_10_IRQHandler 中断函数
void EXTI15_10_IRQHandler(void)//中断函数
{
if(EXTI_GetITStatus(EXTI_Line14) == SET)//判断是不是14号中断
{
Count++;
EXTI_ClearITPendingBit(EXTI_Line14);
}
}