OpenEdv-开源电子网

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

求助,RTC_SetDate() 无法修改日期!

[复制链接]

3

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-11-14
在线时间
2 小时
发表于 2016-11-14 18:16:54 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 amulet116 于 2016-11-14 18:18 编辑

原子哥,小弟在用RTC的时候出现一个问题,百思不得其解,希望赐教。

RTC初始化正常,可以设置日期,时间。可是运行一段时间后,通过RTC_SetDate()重新设置日期失败,日期总是上次的日期。同时用RTC_SetTime(),可以成功修改时间。
对比RTC_SetDate() 和 RTC_SetTime(),操作基本一致,为什么呢? 修改日期是否还需要什么额外操作?

原子哥,是否碰到过同样问题 ?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-11-14 19:18:56 | 显示全部楼层
没遇到过,你直接用我们的RTC例程,测试下看看
回复

使用道具 举报

3

主题

4

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-11-14
在线时间
2 小时
 楼主| 发表于 2016-11-14 19:44:04 | 显示全部楼层
请问具体的是哪个例子?
可否给个链接,多谢了。
回复

使用道具 举报

7

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-10-11
在线时间
43 小时
发表于 2016-11-14 22:26:29 | 显示全部楼层
我用的战舰代码,,f103,,完全不存在你说的问题,,,你去下载个库函数,,,很多demo,,这边不能给你发压缩包
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-11-17 22:54:37 | 显示全部楼层
amulet116 发表于 2016-11-14 19:44
请问具体的是哪个例子?
可否给个链接,多谢了。

usmart实验,就可以直接修改
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
发表于 2016-11-30 10:54:36 | 显示全部楼层
您好,请问能把f103 RTC_SetDate() 和 RTC_SetTime()的库函数版本发给我吗
回复

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-12-29
在线时间
28 小时
发表于 2016-12-29 11:42:53 | 显示全部楼层
我刚刚也遇到了同样的问题,后来想明白了。
程序里面的u8 RTC_Init(void)函数中有这样一句:

if(RTC_Read_BKR(0)!=0x5050)                //是否第一次配置?
       那么在配置完成之后,RTC_Read_BKR(0)的值被设置为0x5050,所以假如我们想要在开机之后再次修改时间,进不去这个if循环,所以没法修改,时间还是上次修改之后的结果。
如果想要每次都可以修改时间,只需要去掉这个if循环,将这个函数改成:
u8 RTC_Init(void)
{
        u16 retry=0X1FFF;
        RCC->APB1ENR|=1<<28;                        //使能电源接口时钟
        PWR->CR|=1<<8;                                        //后备区域访问使能(RTC+SRAM)
        //if(RTC_Read_BKR(0)==0x5050)                //是否第一次配置?
        //{
                RCC->BDCR|=1<<0;                        //LSE 开启  
                while(retry&&((RCC->BDCR&0X02)==0))//等待LSE准备好
                {
                        retry--;
                        delay_ms(5);
                }
                if(retry==0)return 1;                //LSE 开启失败.
                RCC->BDCR|=1<<8;                        //选择LSE,作为RTC的时钟
                RCC->BDCR|=1<<15;                        //使能RTC时钟
                //关闭RTC寄存器写保护
                RTC->WPR=0xCA;
                RTC->WPR=0x53;
                if(RTC_Init_Mode())return 2;//进入RTC初始化模式
                RTC->PRER=0XFF;                                //RTC同步分频系数(0~7FFF),必须先设置同步分频,再设置异步分频,Frtc=Fclks/((Sprec+1)*(Asprec+1))
                RTC->PRER|=0X7F<<16;                //RTC异步分频系数(1~0X7F)
                RTC->CR&=~(1<<6);                        //RTC设置为,24小时格式
                RTC->ISR&=~(1<<7);                        //退出RTC初始化模式
                RTC->WPR=0xFF;                                //使能RTC寄存器写保护  
                RTC_Set_Time(21,5,12,0);        //设置时间
                RTC_Set_Date(16,7,25,3);                //设置日期
                //RTC_Set_AlarmA(7,0,0,10);        //设置闹钟时间
                //RTC_Write_BKR(0,0X5050);        //标记已经初始化过了
        //}
        //RTC_Set_WakeUp(4,0);                        //配置WAKE UP中断,1秒钟中断一次
        return 0;
}
只不过这样修改之后,每次开机都需要自己重新修改时间值。




回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 17:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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