新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2016-2-2
- 在线时间
- 10 小时
|

楼主 |
发表于 2019-1-8 10:07:29
|
显示全部楼层
static u16 fac_ms;
static void SystickDelay_Init(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_ms=SystemCoreClock/8000;
}
void Delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;
SysTick->VAL =0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
do
{
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
void Sys_Standby(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_WakeUpPinCmd(PWR_WakeUpPin_1, DISABLE);
PWR_ClearFlag(PWR_FLAG_SB);
PWR_ClearFlag(PWR_FLAG_WU);
PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);
PWR_EnterSTANDBYMode();
while(1){}
}
void Sys_Enter_Standby(void)
{
Sys_Standby();
}
static u8 Check_WKUP(void)
{
u8 t=0;
GPIO_SetBits(GPIOA,GPIO_Pin_6);
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
{
t++;
Delay_ms(20);
if(t>=100)
{
return 1;
}
}
else
{
return 0;
}
}
}
void WakeUp_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
SystickDelay_Init();
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
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);
if(Check_WKUP()==0)
{
Sys_Standby();
}
}
void EXTI0_1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line0);
if(Check_WKUP())
{
Sys_Enter_Standby();
}
}
}
STM32F0系列 |
|