OpenEdv-开源电子网

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

实时时钟不能设置时间

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-11-18
在线时间
0 小时
发表于 2013-1-4 16:25:09 | 显示全部楼层 |阅读模式
 各位前辈:
           学习  ALIENTEK MiniSTM32开发板例程-库函数V3.5版本_20121027  版本的程序 ,我在用实时时钟时,直接下载的程序,但是我在相应的位置把时间改了就 不能修改时间 ,感觉是时间写不进去。只有把后面电池取下再上,里面的时间 才会变 。这是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外设时钟   
PWR_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寄存器的写操作完成
RTC_Set(2009,12,5,10,0,55);  //设置时间  
BKP_WriteBackupRegister(BKP_DR1, 0X5050); //向指定的后备寄存器中写入用户程序数据
}
else//系统继续计时
{

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

各位帮忙看看,谢谢

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

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-4-23
在线时间
4 小时
发表于 2014-5-6 16:56:59 | 显示全部楼层
不用卸下电池,把这句话里面最后的0x5050随便改成另外一个值就行了 ,野路子啊
if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050)
回复 支持 1 反对 0

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-11-18
在线时间
0 小时
 楼主| 发表于 2013-1-4 18:16:51 | 显示全部楼层
我知道问题了,原子老师。在RTC_Set()中没有
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);   
PWR_BackupAccessCmd(ENABLE);
这两句话
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-4 17:15:23 | 显示全部楼层
if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050) 这个条件约束了。
电池没取下的时候,这个条件只能满足一次。
你要设置时间,不是在这里打主意,而是在main函数里面,直接调用RTC_Set。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-11-18
在线时间
0 小时
 楼主| 发表于 2013-1-4 17:47:49 | 显示全部楼层
若是直接在RTC_Init() 之后的话,直接会白屏
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2012-11-18
在线时间
0 小时
 楼主| 发表于 2013-1-4 17:49:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
若是直接在RTC_Init()?之后的话,直接会白屏
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-4 20:20:50 | 显示全部楼层
回复【5楼】jiushi_ren:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-4-23
在线时间
0 小时
发表于 2014-4-23 11:19:29 | 显示全部楼层
回复【5楼】jiushi_ren:
---------------------------------
你好。我没看明白,到底怎样才能让时间继续走?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-1-21
在线时间
0 小时
发表于 2019-1-21 17:06:04 | 显示全部楼层
GL啊 发表于 2014-4-23 11:19
回复【5楼】jiushi_ren:
---------------------------------
你好。我没看明白,到底怎样才能让时间继续走 ...

你好,我试了一下这种方法只能改年月日,为啥改不了具体的时间呢求求大神
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-1-21
在线时间
0 小时
发表于 2019-1-21 17:06:55 | 显示全部楼层
原子哥,为什么我的只能改变年月日,改不了具体的时分秒呢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 04:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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