学习原子哥的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);
}
}
}
|