STM32入门系列教程之十二实时时钟RTC编程

STM32入门系列教程之十二实时时钟RTC编程

ID:36714658

大小:242.30 KB

页数:5页

时间:2019-05-14

STM32入门系列教程之十二实时时钟RTC编程_第1页
STM32入门系列教程之十二实时时钟RTC编程_第2页
STM32入门系列教程之十二实时时钟RTC编程_第3页
STM32入门系列教程之十二实时时钟RTC编程_第4页
STM32入门系列教程之十二实时时钟RTC编程_第5页
资源描述:

《STM32入门系列教程之十二实时时钟RTC编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、www.arm79.comSTM32入门系列教程实时时钟RTC编程Revision0.01(2010-04-27)1Copyright©2009-2010福州芯达工作室ALLrightsreservedwww.arm79.com对于单片机转ARM的同学来说,RTC可能比较少接触。提到实时时钟,更经常想到的是DS1302。当然,在STM32里,自己一个CPU已经足够,不需要DS1302。实际上,RTC就只一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。因为它掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。我们在本期教程中将

2、详细讲述RTC原理及例程,以引导大家顺利进入RTC的世界。1.STM32的RTC模块RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。下面就来看以下它的组成结构。1.1RTC的组成RTC由两个部分组成:APB1接口部分以及RTC核心部分(感觉说了等于没说,因为任何模块都会有接口部分和它自己的核心部分。请注意,权威的STM32系列手册是这么说的�)。笔者猜想原因可能是STM32所有的外设默认时钟无效,使用某个外设时,再开启时钟,用这样的方式来降低功耗。这里的RTC,APB1接口由APB1总线时钟来驱动。为了突出时钟吧?不过据说

3、APB1接口部分还包括一组16位寄存器。RTC核心部分又分为预分频模块和一个32位的可编程计数器。前者可使每个TR_CLK周期中RTC产生一个秒中断,后者可被初始化为当前系统时间。此后系统时间会按照TR_CLK周期进行累加,实现时钟功能。1.2对RTC的操作我们对RTC的访问,是通过APB1接口来进行的。注意,APB1刚被开启的时候(比如刚上电,或刚复位后),从APB1上读出来的RTC寄存器的第一个值有可能是被破坏了的(通常读到0)。这个不幸,STM32是如何预防的呢?我们在程序中,会先等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1,然后才开始读操作,这时候读出来的

4、值就是OK的。那么对RTC寄存器的写操作会不会有类似的情况呢?对于写操作,我们只要注意,每一次写操作,必须确保在前一次写操作完成后进行。这个“确保”,2Copyright©2009-2010福州芯达工作室ALLrightsreservedwww.arm79.com是通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。只有当RTOFF状态位是1,才可以写RTC寄存器。2.RTC的编程RTC的例程,主要是设置RTC时钟,使得其在超级终端上显示出当前的时钟。这个时钟的显示是“不停地走”。而且掉电后,重新上电,时钟仍然在走,仍然显示当前的时间。当然,如果感兴趣,您

5、可以让它在LCD上显示——那就是一个名副其实的电子钟了。编程的时候,首先要注意备份寄存器BKP_DR1,它做了一件关键的事情:判断RTC是否已经被设置过。因为RTC跟其他计时器不同,它是使用纽扣电池单独供电工作,所以它不会每次上电或者复位都被重置。判断RTC是否已经被设置过,可以决定当前是否需要去设置RTC。如果刚安装电池,第一次上电,自然需要去设置。否则的话,我们只要让它显示当前时钟即可。当第一次使用RTC的时候,可以参考手册。这里对第一次配置需要做的工作进行了总结:1、打开电源管理和备份寄存器时钟。注意,一定要打开备份寄存器的时钟。我们正是通过在备份寄存器写固定的数据来判断芯片是

6、否第一次实用RTC,从而在系统运行RTC时提示配置时钟的。2、使能RTC和备份寄存器的访问(复位默认是关闭的,以防止可能存在的意外的写操作。)。3、选择外部低速晶体为RTC时钟,并使能时钟。笔者当初调试RTC的时候,犯了一个低级错误:由于没有定义如下:#defineRTCClockSource_LSE导致程序一直停留在这里:/*WaittillLSEisready*/while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET){}希望大家看完本教程后,能避免这个错误。4、使能秒中断,程序里在秒中断里置位标志位来通知主程序显示时间数据,同时在32位计

7、数器到23:59:59时清零;5、设置RTC预分频器值产生1秒信号计算公式fTR_CLK=fRTCCLK/(PRL+1),我们设置32767来产生秒信号。3Copyright©2009-2010福州芯达工作室ALLrightsreservedwww.arm79.com我们再次强调:所有在对RTC寄存器操作之前都要判断读写操作是否完成,即内部是否有读写操作。下面来看代码:/*SystemClocksConfiguration*/RCC_Configurati

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。