- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.11 RTC实时时钟实验
前面两节我们介绍了两款液晶模块,这一节我们将介绍 ALIENTEK MiniSTM32 开发板的
实时时钟(RTC )。本节将利用ALIENTEK 2.8 ’的TFTLCD 模块来显示日期和时间,本节将顺
带向大家介绍 BKP 的使用。本节分为如下几个部分:
3.11.1 STM32 RTC 时钟简介
3.11.2 硬件设计
3.11.3 软件设计
3.11.4 下载与测试
181
3.11.1 STM32 RTC 时钟简介
实时时钟(RTC )是一个独立的定时器。RTC 模块拥有一组连续计数的计数器,在相应软
件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC 模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式
唤醒后 RTC 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC ,
以防止对后备区域(BKP) 的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP )
写保护。
RTC 由两个主要部分组成(见下图) 。第一部分(APB1 接口)用来和 APB1 总线相连。此单元
还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口由 APB1 总线时钟
驱动,用来与 APB1 总线接口。
另一部分(RTC 核心) 由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC 的
预分频模块,它可编程产生最长为 1 秒的 RTC 时间基准 TR_CLK 。RTC 的预分频模块包含了
一个 20 位的可编程分频器(RTC 预分频器) 。如果在 RTC_CR 寄存器中设置了相应的允许位,
则在每个 TR_CLK 周期中 RTC 产生一个中断(秒中断) 。第二个模块是一个 32 位的可编程计数
器,可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算,可以记录 4294967296
秒,约合 136 年左右,作为一般应用,这已经是足够了的。
RTC 还有一个闹钟寄存器 RTC_ALR ,用于产生闹钟。系统时间按 TR_CLK 周期累加并与
存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许
位,比较匹配时将产生一个闹钟中断。
图3.11.1.1 RTC 简化框图
182
RTC 内核完全独立于RTC APB1 接口,而软件是通过 APB1 接口访问 RTC 的预分频值、计
数器值和闹钟值的。但是相关可读寄存器只在 RTC APB1 时钟进行重新同步的RTC 时钟的上升
沿被更新,RTC 标志也是如此。这就意味着,如果 APB1 接口刚刚被开启之后,在第一次的内
部寄存器更新之前,从 APB1 上都处的 RTC 寄存器值可能被破坏了(通常读到 0 )。因此,若
在读取 RTC 寄存器曾经被禁止的 RTC APB1 接口,软件首先必须等待 RTC_CRL 寄存器的 RSF
位(寄存器同步标志位,bit3 )被硬件置 1。
接下来,我们介绍一下 RTC 相关的几个寄存器。首先要介绍的是 RTC 的控制寄存器,RTC
总共有 2 个控制寄存器 RTC_CRH 和 RTC_CRL ,两个都是 16 位的。RTC_CRH 的各位描如下
图所示:
图3.11.1.2 寄存器 RTC_CRH 各位描述
该寄存器用来控制中断的,我们这一节将要用到秒钟中断,所以在该寄存器必须设置最低
位为 1,以允许秒钟中断。我们再看看RTC_CRL 寄存器。该寄存器各位描述如下图所示:
183
图3.11.1.3 寄存器 RTC_CRL 各位描述
这一节我们用到的是该寄存器的 0、3~5 这几个位,第 0 位是秒钟标志位,我们在进入闹
钟中断的时候,通过判断这位来决定是不是发生了秒钟中断。然后必须通过软件将该位清零(写
0 )。第3 位为寄存器同步标志位,我们在修改控制寄存器 RTC_CRH/CRL 之前
文档评论(0)