//PA0 WKUP唤醒初始化 void WKUP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; //PA.0 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化IO //使用外部中断方式 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //中断线0连接GPIOA.0 EXTI_InitStructure.EXTI_Line = EXTI_Line0; //设置按键所有的外部线路 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设外外部中断模式:EXTI线路为中断请求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); // 初始化外部中断 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级2级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 if(Check_WKUP()==0) Sys_Standby(); //不是开机,进入待机模式 }
//中断,检测到PA0脚的一个上升沿. //中断线0线上的中断检测 void EXTI0_IRQHandler(void) { EXTI->PR=1<<0; //清除LINE10上的中断标志位 if(2==Check_WKUP())//待机? { StandbyMode(); } }
//中断,检测到PA0脚的一个上升沿. //中断线0线上的中断检测 void EXTI0_IRQHandler(void) { EXTI->PR=1<<0; //清除LINE10上的中断标志位 if(Check_WKUP())//关机? { Sys_Enter_Standby(); } }
void EXTI0_IRQHandler(void) { EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中断标志位 if(Check_WKUP())//关机? { Sys_Enter_Standby(); } }
/* *@功能:唤醒初始化 */ void WKUP_Init(void) { uint8_t cw; cw=Check_WKUP(); OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示 //程序刚下进去时由于没有长按取消键,所以检测结果为0,直接进入停机模式 //if(Check_WKUP()) if(!cw) Sys_Standby(); //不是开机,进入停机模式 }
//PA0 WKUP唤醒初始化 void WKUP_Init(void) { RCC->APB2ENR|=1<<2; //先使能外设IO PORTA时钟 RCC->APB2ENR|=1<<0; //开启辅助时钟 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入 GPIOA->CRL|=0X00000008; Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿触发 //(检查是否是正常开)机 if(Check_WKUP()==0)Sys_Standby(); //不是开机,进入待机模式 MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2 }