//MCU进入停机模式
void MCU_EnterSTOPMode(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
RTC_WaitForLastTask();
RTC_ClearFlag(RTC_FLAG_SEC);
RTC_WaitForLastTask();
while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
RTC_SetAlarm(RTC_GetCounter()+ Stop_Time);
//Stop_Time这个是唤醒时间,单位是秒,即Stop_Time秒后启动RTC唤醒
RTC_WaitForLastTask();
RTC_ClearFlag(RTC_FLAG_RSF);
RTC_WaitForLastTask();
RTCAlarm_IT_Enable();
RTC_WaitForLastTask();
EXTIX_Init();
EXIT_Configuration();
STOP_PeripthAndClk();
EXTI->PR = 0x00;
/* Request to enter STOP mode with regulator in low power mode*/
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
CLI();
System_timer_1ms = 0;
SYSCLKConfig_STOP();
START_PeripthAndClk();
SEI();
}
|