新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2021-8-27
- 在线时间
- 1 小时
|
发表于 2022-3-30 12:05:04
|
显示全部楼层
//系统进入待机模式
void Sys_Enter_Standby(void)
{
__HAL_RCC_AHB1_FORCE_RESET(); //复位所有IO口
while(WKUP_KD); //等待WK_UP按键松开(在有RTC中断时,必须等WK_UP松开再进入待机)
__HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟
__HAL_RCC_BACKUPRESET_FORCE(); //复位备份区域
HAL_PWR_EnableBkUpAccess(); //后备区域访问使能
//STM32F4,当开启了RTC相关中断后,必须先关闭RTC中断,再清中断标志位,然后重新设置
//RTC中断,再进入待机模式才可以正常唤醒,否则会有问题.
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
__HAL_RTC_WRITEPROTECTION_DISABLE(&RTC_Handler);//关闭RTC写保护
//关闭RTC相关中断,可能在RTC实验打开了
__HAL_RTC_WAKEUPTIMER_DISABLE_IT(&RTC_Handler,RTC_IT_WUT);
__HAL_RTC_TIMESTAMP_DISABLE_IT(&RTC_Handler,RTC_IT_TS);
// __HAL_RTC_ALARM_DISABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRB);
//清除RTC相关中断标志位
__HAL_RTC_ALARM_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_ALRAF|RTC_FLAG_ALRBF);
__HAL_RTC_TIMESTAMP_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_TSF);
__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_WUTF);
__HAL_RCC_BACKUPRESET_RELEASE(); //备份区域复位结束
__HAL_RTC_WRITEPROTECTION_ENABLE(&RTC_Handler); //使能RTC写保护
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); //清除Wake_UP标志
RTC_Init(); //初始化RTC
RTC_Set_WakeUp(RTC_WAKEUPCLOCK_CK_SPRE_16BITS,9); //配置WAKE UP中断,10秒钟中断一次
__HAL_RTC_TIMESTAMP_ENABLE_IT(&RTC_Handler,RTC_IT_TS);
// __HAL_RTC_ALARM_ENABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRB);
__HAL_RTC_WAKEUPTIMER_ENABLE_IT(&RTC_Handler,RTC_IT_WUT);
// RTC_Init(); //初始化RTC
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); //设置WKUP用于唤醒
HAL_PWR_EnterSTANDBYMode(); //进入待机模式
}
注意,要先配置RTC,后开中断,才能正常定时唤醒,否则唤醒异常
|
|