78 lines
1.8 KiB
C
78 lines
1.8 KiB
C
#include "bsp.h"
|
||
#include "exti_io.h"
|
||
|
||
void WakeUp_EXIT_Config( void )
|
||
{
|
||
GPIO_InitTypeDef GPIO_InitStructure;
|
||
NVIC_InitTypeDef NVIC_InitStructure;
|
||
EXTI_InitTypeDef EXTI_InitStructure;
|
||
//enable GPIOA Clock
|
||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
|
||
// config PA10 as input floating
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //very import
|
||
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||
|
||
//enable syscfg clock
|
||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
||
// connect EXTI0 line to PA0 pin
|
||
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
|
||
|
||
//config EXTI10 Line
|
||
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
|
||
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
||
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
||
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||
EXTI_Init(&EXTI_InitStructure);
|
||
|
||
// enable and set EXTI0 interrupu to the lowest priority
|
||
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
|
||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
|
||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
|
||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||
NVIC_Init(&NVIC_InitStructure);
|
||
PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);
|
||
}
|
||
|
||
//检测WKUP脚的信号
|
||
//返回值1:连续按下3s以上
|
||
// 0:错误的触发
|
||
u8 Check_WKUP(void)
|
||
{
|
||
u8 t=0; //记录按下的时间
|
||
|
||
while(1)
|
||
{
|
||
if(WKUP_KD)
|
||
{
|
||
t++; //已经按下了
|
||
delay_ms(30);
|
||
if(t>=100) //按下超过3秒钟
|
||
{
|
||
|
||
return 1; //按下3s以上了
|
||
}
|
||
}else
|
||
{
|
||
|
||
return 0; //按下不足3秒
|
||
}
|
||
}
|
||
}
|
||
void EXTI0_IRQHandler( void )
|
||
{
|
||
EXTI_ClearITPendingBit(EXTI_Line10); //Clear the EXTI line 10 pending bit
|
||
if(Check_WKUP()==0)//关机?
|
||
{
|
||
Wake_Up_Flag=0;
|
||
PWR_EnterSTANDBYMode(); //进入待机(STANDBY)模式
|
||
}else
|
||
{
|
||
Wake_Up_Flag=1;
|
||
}
|
||
}
|
||
|
||
|
||
|