OpenEdv-开源电子网

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

RTC设置疑问

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2011-7-5
在线时间
4 小时
发表于 2011-7-9 23:02:32 | 显示全部楼层 |阅读模式
 复位后,禁止访问后备寄存器和RTC,所以要启用以下代码:
RCC->APB1ENR|=1<<28;     //使能电源时钟    
  RCC->APB1ENR|=1<<27;     //使能备份时钟    
  WR->CR|=1<<8;           //取消备份区写保护

我的疑问是,重新上电复位,为什么不在以下代码中添加上面三句代码!
{
     while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步 
     RTC->CRH|=0X01;      //允许秒中断
     while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
  printf("OK\n");
 }       

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-9 23:55:32 | 显示全部楼层
回复【楼主位】hnnzzh:
---------------------------------
这里我也有疑问.
<<参考手册>>第44页,PWR_CR寄存器DBP位的描述,有如下说明:
在复位后,RTC和后备寄存器处于被保护状态以防意外写入。
设置这位允许写入这些寄存器。 
0:禁止写入RTC和后备寄存器 1:允许写入RTC和后备寄存器

这里,我猜测所谓的RTC寄存器,应该是指那些影响RTC运行的寄存器,比如分频系数(RTC->RLL/H)寄存器等.
而对于RTC->CRL等这些寄存器则不受约束.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2011-7-5
在线时间
4 小时
 楼主| 发表于 2011-7-10 12:26:11 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢正点原子的解答!
我的理解是这样的:
在复位后,RTC和后备寄存器处于被保护状态以防意外写入。 
设置这位允许写入这些寄存器。  
0:禁止写入RTC和后备寄存器 1:允许写入RTC和后备寄存器 

上电复位后,RTC和后备寄存器处于被保护状态以防意外写入,
 写寄存器被禁止,但读寄存器没有被禁止,所以读寄存器是可以的,写的话就要先使能了!
 所以 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec),里面就要先使能,
而 RTC_Get(void),里面就不用了!






回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-7-10 13:07:45 | 显示全部楼层
但是 RTC->CRH|=0X01;      //允许秒中断
也是写啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-9-29 11:06:19 | 显示全部楼层

回复【4楼】正点原子:
---------------------------------
你的意思是else里面有RTC->CRH|=0X01这一语句,这个语句也是写操作,但却没有置位PWR_CR的DBP位的意思吧?但是之前的第一次配置操作已经置位PWR_CR的DBP位了,并且之后的代码中并未有清除PWR_CR中DBP位的语句,所以,else里面的RTC->CRH|=0X01这一语句是在默认的已经置位PWR_CR的DBP位的前提下写出来的。


在复位后,RTC和后备寄存器处于被保护状态以防意外写入。 
设置这位允许写入这些寄存器。  
0:禁止写入RTC和后备寄存器 1:允许写入RTC和后备寄存器 


所以个人觉得:
禁止写入或者写入RTC和后备寄存器中是指所有RTC寄存器或和所有后备寄存器

回复 支持 反对

使用道具 举报

0

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-9-27
在线时间
0 小时
发表于 2013-9-29 11:18:11 | 显示全部楼层
回复【楼主位】hnnzzh:
---------------------------------
因为第一次配置RTC时钟已经置位DBP位,并且设置之后并未清除DBP位,所以不用 

PWR->CR|=1<<8;           //取消备份区写保护

这一句了,同理其他两句。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 12:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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