void WKUP_Init(void) //initial PA0
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//pull down
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
在主函数main 的loop里执行
void Sys_Standby(void)
{
NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_WakeUpPinCmd(ENABLE);
RCC_APB2PeriphResetCmd(0X01FC,DISABLE);
PWR_EnterSTANDBYMode();
}
测试时主函数里执行到Sys_Standby(),就进入待机状态。PA0 的上升沿就唤醒。不过待机时测量整个电路板电流时还有4mA的电流,这个应该是其他外设引起的。 |