1:配置外设GPIO端口(具体配置为请看配置GPIO流程)
????????GPIO_Init();
2:使能复用功能时钟
????????RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);? ? ? ?
3:初始化外部中断以及配置中断映射
????????EXTI_InitTypeDef ?EXTI_InitStruct;
????????GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);? ? //中断映射 ????????EXTI_InitStruct.EXTI_Line = EXTI_Line0;? ? ? ? //中断线 ????????EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;? ? ? ? //中断模式 ????????EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;? ? ? ? //上升/下降沿选择 ????????EXTI_InitStruct.EXTI_LineCmd = ENABLE;? ? //中断使能 ????????EXTI_Init(&EXTI_InitStruct);
4:初始化中断控制器以及中断分组
????????NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);? ? ? ? //中断分组
????????NVIC_InitTypeDef?? ?NVIC_InitStruct;?
????????NVIC_InitStruct.NVIC_IRQChannel?? ?= EXTI0_IRQn;? ? ? ? //中断通道 ????????NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;? ? ? ? //优先级 ????????NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3;? ? ? ? ? ? ? ?//响应级 ????????NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;? ? ? ? //使能 ????????NVIC_Init(&NVIC_InitStruct);
5:编写中断服务函数 以及 清除中断标志
????????void EXTI0_IRQHandler(void){???????????????????//中断通道0的中断服务函数
????????????????EXTI_ClearITPendingBit(EXTI_Line0);? ? //清除中断标志
????????}?????????????
|