|
实时时钟(RTC)是一个专用于保持时间的计时元素。在许多的应用中,特别是在需要执行精确定时操作的应用,RTC是非常有用的工具。除了钟表这类应用的例子外还包括洗衣机、医药柜、数据记录仪等。RTC基本上是一个定时计数器,但和MCU的其他定时器不同的是,它更精确一些。在此之前文章中,我们探讨了STM32定时器,但他们对PWM生成、时基和其它波形相关任务的应用程序是有用的。那些都不适合于精确的计时功能。在大多数的8位MCU中,像普通的PIC和AVR,并有没有内置RTC模块,所以当我们需要一个板载的精确计时器件时,只能使用类似常见的DS1302或PCF8563的专用RTC芯片。这些芯片还需要一些额外的电路、布线以及电路板空间。但是,目前大多数先进的微控制器都集成了设计人员可以想到的每一个可能的硬件。这仅取决于设计者决定使用现代微控制器的哪个资源,来满足特定的设计目标。制造用于满足应用特定需求的MCU的时代已经过去了,在设计中使用并涉及多个元件的时代也已经过去了。因此,成本、时间和空间都会大大减少,从而导致出现更聪明、更时尚和更微小的价格适中的设备。幸运的是,STM32s属于这些新时代的微控制器。 STM32微控制器内置RTC模块,不需要额外的硬件支持。本教程介绍STM32内部RTC的基本功能,以及如何使用它进行计时应用。
STM32 RTC模块的特点 STM32微控制器内嵌的RTC是一个独立的二进制编码的十进制(BCD)定时器计数器。 RTC内核由计数器、预分频器、时钟分频器、报警数据寄存器等组成。与任何一款标准的RTC芯片一样,内嵌的RTC可以用于提供一个全功能的基于软件的日历,并带有报警功能。但是,在软件方面需要做的更多,而硬件方面不需要。当使用RTC芯片时,仅需要读取或写入个别的日期时间寄存器。在STM32微控制器中,我们需要做的还不止这些,因为不存在独立的日期时间寄存器。 一旦时间设置后,复位或从休眠/待机模式唤醒单片机不会重新初始化时间。如果备用电池(VBAT)引脚有备用电池它会变得更好。STM32的所有VDDS可以被关断,或者换句话说整个MCU内核可以完全关闭,但备用电池保持RTC和备份域的运行。因此,在掉电和休眠模式的过程中,时间不会改变或者丢失。STM32内嵌的RTC的主要特点如下: ■ 分频器:分频系数最大可达220。 ■ 用于长期测量的32位可编程计数器 ■ 两个独立的时钟:APB1接口的PCLK1和RTC时钟。 ■ RTC时钟源可以是以下的任何一个: ■ HSE时钟除以128。 ■ LSE振荡器时钟。 ■ LSI振荡器时钟。
■ 两个独立的复位类型: ■ APB1接口由系统复位进行复位。 ■ RTC的内核仅可以通过备份域复位进行复位。 ■ 三个专用的可屏蔽的中断方式: ■ 报警中断,用于生成软件可编程的报警中断。 ■ 秒中断,用于生成周期长度可编程的周期性的中断信号(最高可达1秒)。 ■ 溢出中断,检测内部可编程计数器何时回零。 功能说明 下面显示的是一个典型STM32F10x微控制器的内嵌RTC的框图。
RTC由两大部分组成。第一个是APB1总线接口。APB1总线接口由时钟分频器组成,用于连接APB1总线。该接口还包括一组16位寄存器,可以通过APB1总线操作进行读取/写入。 另一部分是RTC内核。它由一组可编程计数器组成,并分为两个模块。第一模块是RTC分频器模块。这个模块通过使用一个20位的可编程分频器生成一个可编程时基的一秒钟(TR_CLK)。另一个模块是用来保持秒计数的一个32位宽的可编程计数器。既然是32位宽,一秒的时间TR_CLK,可记录长达4,294,967,296秒或者是大约一个世纪 - 对于任何机器或人的寿命来说都是一个相当大的时间。 有几个报警相关的寄存器,其工作方式与定时器中的比较匹配中断方式类似。与计数器寄存器中的值进行比较时,无论存储在报警寄存器的是何值,当两个寄存器组具有相同的值时,就会产生报警事件。 RTC内核完全独立于RTC APB1接口,就像独立的看门狗定时器(IWDG)。 RTC寄存器、计数器、报警和标志是通过APB1接口进行访问,但计数器寄存器是由一个单独的RTC时钟更新。如框图所示,即使APB1总线没有供电,RTC内核会一直工作。使用电池或超级电容作为备份电源时才会有可能这样。
原文章:STM32’s internal RTC |