1. STOP0模式进入STOP0模式之前必须要关闭SysTick中断否则会唤醒STOP0械唤醒之后再开启SysTick中断对应的代码步骤为1关闭 SysTick (暂停计数关闭中断),保留原有配置值(LOAD/VAL), 下次开启恢复运行SysTick-CTRL ~(SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);2进入STOP0模式代码PWR_EnterSLEEPMode(0, PWR_STOPENTRY_WFI);3开启 SysTick (恢复计数开启中断)使用之前配置好的时钟源、重装载值SysTick-CTRL | (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);2. STOP2模式进入STOP2模式前要关闭RCC_APB1_PERIPH_PWR时钟配置系统时钟为内部高速时钟唤醒后再开启RCC_APB1_PERIPH_PWR时钟注意读写备份域数据必须开启同时配置外部时钟RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, DISABLE); //禁止PWR时钟SetSysClockToHSI(); //配置为内部时钟PWR_EnterSTOP2Mode(PWR_STOPENTRY_WFI); //进入STOP2模式RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE); //开启PWR时钟SYSCLKConfig_STOP(RCC_CFG_PLLMULFCT18); //重新配置时钟18倍频144M3. RTC唤醒休眠和RTC唤醒全过程1上电RTC初始化只上电处理即可可配置为LSI / LSE独立时钟进 STOP2 也不断电继续跑2进入休眠前配置ALARM唤醒时间配置唤醒时间前要先关闭中断配置完后再开启中断如设置唤醒时间为20秒钟代码如下3进入休眠模式;(4)唤醒后重新初始化外设4. 详细代码如下1 ALARM中断使能禁止函数void Mcu_RtcAlarmEnable(uint8_t En){RTC_EnableAlarm(RTC_A_ALARM, En);RTC_ConfigInt(RTC_INT_ALRA, En);}2重新设置时间static ErrorStatus Mcu_RtcTimeSet(void){RTC_TimeType RTC_TimeStructure;RTC_TimeType RTC_TimeRead {0};RTC_TimeStructure.H12 RTC_AM_H12;RTC_TimeStructure.Hours 0;RTC_TimeStructure.Minutes 0;RTC_TimeStructure.Seconds 0;if (RTC_ConfigTime(RTC_FORMAT_BIN, RTC_TimeStructure) ERROR){return ERROR;}else{RTC_GetTime(RTC_FORMAT_BIN, RTC_TimeRead);return SUCCESS;}}3设置告警间隔时间单位为秒void Mcu_RtcSetAlarm(uint32_t AlarmTime){RTC_AlarmType RTC_AlarmStructure;RTC_AlarmType RTC_AlarmRead {0};Mcu_RtcTimeSet();RTC_EnableAlarm(RTC_A_ALARM, DISABLE);RTC_AlarmStructure.AlarmTime.H12 RTC_AM_H12;RTC_AlarmStructure.AlarmTime.Hours 0;RTC_AlarmStructure.AlarmTime.Minutes 0;RTC_AlarmStructure.AlarmTime.Seconds AlarmTime;RTC_AlarmStructure.DateWeekValue 31;RTC_AlarmStructure.DateWeekMode RTC_ALARM_SEL_WEEKDAY_DATE;RTC_AlarmStructure.AlarmMask RTC_ALARMMASK_WEEKDAY | RTC_ALARMMASK_HOURS | RTC_ALARMMASK_MINUTES;RTC_SetAlarm(RTC_FORMAT_BIN, RTC_A_ALARM, RTC_AlarmStructure);RTC_GetAlarm(RTC_FORMAT_BIN, RTC_A_ALARM, RTC_AlarmRead);RTC_ClrIntPendingBit(RTC_INT_ALRA);EXTI_ClrITPendBit(EXTI_LINE17);}4休眠前RTC唤醒时间配置如配置20秒唤醒Rtc_AlarmEnable(DISABLE);Rtc_SetAlarm(20);Rtc_AlarmEnable(ENABLE);5进入休眠模式STOP2模式如下RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, DISABLE); //禁止PWR时钟SetSysClockToHSI(); //配置为内部时钟PWR_EnterSTOP2Mode(PWR_STOPENTRY_WFI); //进入STOP2模式RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE); //开启PWR时钟SYSCLKConfig_STOP(RCC_CFG_PLLMULFCT18); //重新配置时钟18倍频144MSTOP0模式如下SysTick-CTRL ~(SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);PWR_EnterSLEEPMode(0, PWR_STOPENTRY_WFI);SysTick-CTRL | (SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);SYSCLKConfig_STOP(RCC_CFG_PLLMULFCT18); //重新配置时钟18倍频144M