void EXITiNIT(void){ ?? ?NVIC_InitTypeDef waibuteat; ?? ?EXTI_InitTypeDef TheEXIT4; ?? ?/****************************1初始化io为输入****************************/ ?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
?? ?PE2and3and4.GPIO_Pin=GPIO_Pin_4; ?? ?PE2and3and4.GPIO_Mode=GPIO_Mode_IPU; ?? ?PE2and3and4.GPIO_Speed=GPIO_Speed_50MHz; ?? ?GPIO_Init(GPIOE,&PE2and3and4); ?? ?/****************************2开启io复用时钟********************************/
?? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); ?? ?/*************************3设置IO与中断线关系*****************************/ ?? ?GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);//指定组别,与对应映射线
?? ?/*********************************4初始化中断线******************************/ ?? ? ?? ?TheEXIT4.EXTI_Line=EXTI_Line4;//中断线 ?? ?TheEXIT4.EXTI_LineCmd=ENABLE;//是使能还是失能 ?? ?TheEXIT4.EXTI_Mode=EXTI_Mode_Interrupt;//是中断还是事件 ?? ?TheEXIT4.EXTI_Trigger= EXTI_Trigger_Falling;//触发方式,下降沿 ?? ?EXTI_Init(&TheEXIT4);
?? ?/*********************5配置中断函数分组*******************************/ ?? ?//分组在主函数NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
?? ?waibuteat.NVIC_IRQChannel=EXTI4_IRQn; ?? ?waibuteat.NVIC_IRQChannelCmd=ENABLE; ?? ?waibuteat.NVIC_IRQChannelPreemptionPriority=1; ?? ?waibuteat.NVIC_IRQChannelSubPriority=1; ?? ?NVIC_Init(&waibuteat); //OpenLed1(); //OpenLed2(); } /*********************6中断函数**************************/ void EXIT4_IRQHandler(void) { if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0){ ?? ?OpenLed1(); ?? ?OpenLed2(); ?? ?} /********************7清楚中断标志*******************/ ?? ?EXTI_ClearITPendingBit(EXTI_Line4);
} ?
|