OpenEdv-开源电子网

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

待机模式中RTC时钟计时不正常

[复制链接]

2

主题

2

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-7-23
在线时间
9 小时
发表于 2019-8-12 10:55:26 | 显示全部楼层 |阅读模式
1金钱
学习原子哥的RTC实验和待机唤醒实验,单独均可以实现。我把二者结合在一起时,单独按wkup,进行待机或退出唤醒,时钟计时正常。但是我一断电源,再唤醒,时钟就回到我设置的初值。怎么解决断电再唤醒时,时钟恢复初值问题呢?


/*************************************************************下面是main函数源码************************************************************************************/
/*************************************************************其他c、h文件与例程相同********************************************************************************/
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "usmart.h"       
#include "rtc.h"
#include "wkup.h"


int main(void)
{         
        u8 t = 0;
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                             //LED端口初始化                
        WKUP_Init(); //待机唤醒初始化
        LCD_Init();         //LCD初始化
        RTC_Init();                                  //RTC初始化
        POINT_COLOR=RED;
         
        LCD_ShowString(30,50,200,16,16,"Warship STM32");       
        LCD_ShowString(30,70,200,16,16,"WKUP TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2014/1/14");
        //显示时间
        POINT_COLOR=BLUE;//设置字体为蓝色
        LCD_ShowString(60,130,200,16,16,"    -  -  ");          
        LCD_ShowString(60,162,200,16,16,"  :  :  ");                    

        while(1)
        {
                if(t!=calendar.sec)
                {
                        t=calendar.sec;
                        LCD_ShowNum(60,130,calendar.w_year,4,16);                                                                          
                        LCD_ShowNum(100,130,calendar.w_month,2,16);       
                        if(calendar.w_month < 10)LCD_ShowNum(100,130,0,1,16);
                        LCD_ShowNum(124,130,calendar.w_date,2,16);         
                        if(calendar.w_date < 10)LCD_ShowNum(124,130,0,1,16);
                        switch(calendar.week)
                        {
                                case 0:
                                        LCD_ShowString(60,148,200,16,16,"Sunday   ");
                                        break;
                                case 1:
                                        LCD_ShowString(60,148,200,16,16,"Monday   ");
                                        break;
                                case 2:
                                        LCD_ShowString(60,148,200,16,16,"Tuesday  ");
                                        break;
                                case 3:
                                        LCD_ShowString(60,148,200,16,16,"Wednesday");
                                        break;
                                case 4:
                                        LCD_ShowString(60,148,200,16,16,"Thursday ");
                                        break;
                                case 5:
                                        LCD_ShowString(60,148,200,16,16,"Friday   ");
                                        break;
                                case 6:
                                        LCD_ShowString(60,148,200,16,16,"Saturday ");
                                        break;  
                        }
                        LCD_ShowNum(60,162,calendar.hour,2,16);       
                        if(calendar.hour < 10)LCD_ShowNum(60,162,0,1,16);       
                        LCD_ShowNum(84,162,calendar.min,2,16);
                        if(calendar.min < 10)LCD_ShowNum(84,162,0,1,16);
                        LCD_ShowNum(108,162,calendar.sec,2,16);
                        if(calendar.sec<10)LCD_ShowNum(108,162,0,1,16);
                        LED0=!LED0;
                delay_ms(250);
        }
        }

}





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

使用道具 举报

1

主题

231

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2872
金钱
2872
注册时间
2018-1-24
在线时间
258 小时
发表于 2019-8-12 13:55:13 | 显示全部楼层
首先打开看门狗,唤醒时故意在中断搞个循环,直到看门狗把他复位不就初始化掉了吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 16:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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