OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2486|回复: 4

stm32f429进入待机模式唤醒后RTC被重置成默认值

[复制链接]

8

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2020-6-24
在线时间
27 小时
发表于 2020-7-20 11:47:15 | 显示全部楼层 |阅读模式
1金钱

待机唤醒后RTC备份寄存器里面的值没有保留,然后又进行了初始化,注释掉设置时间的语句,就会重置为2000年,也就是RTC寄存器里的值也丢失了,大佬些帮小弟看下这个是怎么回事呀~

u8 RTC_Init(void)
{            
        RTC_Handler.Instance=RTC;
    RTC_Handler.Init.HourFormat=RTC_HOURFORMAT_24;//RTC设置为24小时格式
    RTC_Handler.Init.AsynchPrediv=0X7F;           //RTC异步分频系数(1~0X7F)
    RTC_Handler.Init.SynchPrediv=0XFF;            //RTC同步分频系数(0~7FFF)   
    RTC_Handler.Init.OutPut=RTC_OUTPUT_DISABLE;     
    RTC_Handler.Init.OutPutPolarity=RTC_OUTPUT_POLARITY_HIGH;
    RTC_Handler.Init.OutPutType=RTC_OUTPUT_TYPE_OPENDRAIN;
    if(HAL_RTC_Init(&RTC_Handler)!=HAL_OK) return 2;

    if(HAL_RTCEx_BKUPRead(&RTC_Handler,RTC_BKP_DR0)!=0X5050)//是否第一次配置
    {
        RTC_Set_Time(23,59,56,RTC_HOURFORMAT12_PM);                //设置时间 ,根据实际时间修改
                RTC_Set_Date(20,7,27,7);                                    //设置日期
        HAL_RTCEx_BKUPWrite(&RTC_Handler,RTC_BKP_DR0,0X5050);//标记已经初始化过了
    }
    return 0;
}

//系统进入待机模式
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标志
       

    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);           //设置WKUP用于唤醒
    HAL_PWR_EnterSTANDBYMode();                         //进入待机模式     
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2020-6-24
在线时间
27 小时
 楼主| 发表于 2020-7-20 13:03:06 | 显示全部楼层
回复

使用道具 举报

6

主题

413

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2650
金钱
2650
注册时间
2019-8-14
在线时间
411 小时
发表于 2020-7-20 15:56:59 | 显示全部楼层
帮顶~~
回复

使用道具 举报

8

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2020-6-24
在线时间
27 小时
 楼主| 发表于 2020-7-23 10:36:16 | 显示全部楼层
绑定~~
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2023-10-21
在线时间
20 小时
发表于 2024-5-3 13:46:37 | 显示全部楼层
__HAL_RCC_BACKUPRESET_FORCE();      //复位备份区域
这行代码注释掉就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 06:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表