OpenEdv-开源电子网

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

(急!)RTC掉电后,数据都从0开始,这是为何?

[复制链接]

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-4-4
在线时间
0 小时
发表于 2014-4-30 20:01:50 | 显示全部楼层 |阅读模式

在硬件上,我有电池供电,在掉电后,一上电则数据全部从0开始计时,这是为什么?有外接3.3V左右的电池供电,RTC时钟,是用原子的例程。
u8 RTC_Init(void)
 {
 //检查是不是第一次配置时钟
 u8 temp=0;
 RTC_NVIC_Config();
 //if(BKP->DR1!=0X5050)//第一次配置
 if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)  //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
  {     
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟  
  WR_BackupAccessCmd(ENABLE); //使能RTC和后备寄存器访问
  BKP_DeInit(); //将外设BKP的全部寄存器重设为缺省值  
  RCC_LSEConfig(RCC_LSE_ON); //设置外部低速晶振(LSE),使用外设低速晶振

  while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) //检查指定的RCC标志位设置与否,等待低速晶振就绪
   {
   temp++;
   delay_ms(10);
   }
  if(temp>=250)return 1;//初始化时钟失败,晶振有问题    
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟   
  RCC_RTCCLKCmd(ENABLE); //使能RTC时钟 
  RTC_WaitForSynchro();  //等待最近一次对RTC寄存器的写操作完成
  RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
  RTC_ITConfig(RTC_IT_SEC, ENABLE);  //使能RTC秒,闹钟中断

  RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
  RTC_SetPrescaler(32767); //设置RTC预分频的值
  RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成

  BKP_WriteBackupRegister(BKP_DR1, 0X5050); //向指定的后备寄存器中写入用户程序数据
  }
 else//系统继续计时
  {
//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟  
//  WR_BackupAccessCmd(ENABLE); //使能RTC和后备寄存器访问

//  RTC_EnterConfigMode();     
//  Auto_Time_Set();  
//  RTC_ExitConfigMode();
        
  RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成
  RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断
  RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
  }              
 RTC_Get();//更新时间 
 RCC_ClearFlag(); //清除RCC的复位标志位
 return 0; //ok
 }

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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-30 20:54:55 | 显示全部楼层
你的RTC初始化语句是不是没有注释掉呀,你注释掉那个判断的语句之后,main中的初始化语句没有注释的话就会从零开始的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-4-4
在线时间
0 小时
 楼主| 发表于 2014-4-30 21:17:28 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
什么意思?
//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟   
//  WR_BackupAccessCmd(ENABLE); //使能RTC和后备寄存器访问 

//  RTC_EnterConfigMode();      
//  Auto_Time_Set();  
 //  RTC_ExitConfigMode();
是这些语句吗?我是在编译后下载进去,注释掉后再下载进去,这样应该没有问题吧?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-1 13:16:12 | 显示全部楼层
原子的例程不是注释很明白了么
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-10 11:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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