exit.c
- //按键1中断配置
- void Exti_PA0_Init(void)
- {
- //库函数初始化步骤1:定义一个xxx_InitTypeDef类型的初始化结构体
- GPIO_InitTypeDef GPIO_InitStruct;
- EXTI_InitTypeDef EXTI_InitStruct;
- NVIC_InitTypeDef NVIC_InitStruct;
-
-
- //☆☆☆使能GPIO A组时钟:
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
-
- //☆☆☆使能SYSCFG时钟:
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
-
- //库函数初始化步骤2:根据使用要求,向这些初始化结构体的成员写入特定的控制参数
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; //引脚0
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //输入模式
- GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
- GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- //设置IO口与中断线的映射关系。PA0对应中断线0,详细看上图
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
-
- EXTI_InitStruct.EXTI_Line = EXTI_Line0; //中断线0 (可变)
- EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
- //可选为产生中断(EXTI_Mode_Interrupt)或者产生事件(EXTI_Mode_Event)
-
- EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStruct.EXTI_LineCmd= ENABLE; //中断线使能
- //初始化线上中断,设置触发条件等。
- EXTI_Init(&EXTI_InitStruct);
-
- NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; //NVIC通道,在stm32f4xx.h可查看通道 (可变)
- NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x01; //抢占优先级
- NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01; //响应优先级
- NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //使能
- //配置中断分组(NVIC),并使能中断。
- NVIC_Init(&NVIC_InitStruct);
-
- }
- //编写中断服务函数。这个函数不需要程序员在主函数调用,满足条件CPU自行调用的函数
- void EXTI0_IRQHandler(void)
- {
- //判断中断标志是否为1 ☆☆☆消抖
- if(EXTI_GetITStatus(EXTI_Line0)) //判断是EXTI0中断线进来的。一般用于防止例如EXTI5-9共用一个服务函数的情况
- {
- delay_ms(15);
- if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
- {
- if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
- {
- //变更灯状态
- GPIO_ToggleBits(GPIOF, GPIO_Pin_9);
- }
-
- // 清除中断标志位
- EXTI_ClearITPendingBit(EXTI_Line0);
- }
-
- }
- }
|