英语原文共 45 页,剩余内容已隐藏,支付完成后下载完整资料
基于STM32 F0,F2,F3,F4和L1系列MCU中的硬件实时时钟
介绍
实时时钟(RTC)是一个记录当前时间的计算机时钟。 尽管RTC经常用于个人电脑,服务器和嵌入式系统,但它们也存在于几乎任何需要精确计时的电子设备中。 支持RTC的微控制器可用于计时器,闹钟,手表,小型电子议程和许多其他设备。 本应用笔记介绍嵌入到超低功耗中密度,超低功耗高密度,F0,F2和F4系列器件微控制器中的实时时钟(RTC)控制器的功能,以及将RTC配置为 使用日历,闹钟,定期唤醒单元,篡改检测,时间戳和校准应用程序。 提供了配置信息示例,使您能够快速,正确地配置日历,闹钟,定期唤醒单元,篡改检测,时间戳和校准应用程序的RTC。
注意:所有示例和解释均基于STM32L1xx,STM32F0xx,STM32F2xx STM32F4xx和STM32F3xx固件库以及STM32L1xx(RM0038),STM32F0xx(RM0091),STM32F2xx(RM0033),STM32F4xx(RM0090),STM32F37x(RM0313)和STM32F30x(RM0316)的参考手册。)。 STM32是指本文档中的超低功耗中密度,超低功耗高密度,F0,F2和F4系列器件。 超低功耗介质(ULPM)密度器件是STM32L151xx和STM32L152xx微控制器,其中闪存密度介于64和128 KB之间。 Ultra Low Power High(ULPH)密度器件是STM32L151xx,STM32L152xx和STM32L162xx微控制器,其中闪存密度为384千字节。 F2系列器件是STM32F205xx,STM32F207xx,STM32F215xx和STM32F217xx微控制器。 STM32F3xx是指STM32F30x,STM32F31x,STM32F37x和STM32F38x器件。 F4系列是STM32F405xx,STM32F407xx,STM32F415xx和STM32F417xx微控制器。 F0系列设备是微控制器。
表1列出了本应用笔记所涉及的微控制器。
1 STM32高级RTC概述
嵌入在STM32微控制器中的实时时钟(RTC)充当独立的BCD定时器/计数器。 RTC可用于提供全功能日历,闹钟,定期唤醒单元,数字校准,同步,时间戳和高级篡改检测。 有关每个设备上可用功能的完整列表,请参阅表15:高级RTC功能。
-
- RTC日历
日历跟踪时间(小时,分钟和秒)和日期(日,周,月,年)。
STM32 RTC日历提供了几个功能,可以轻松配置和显示日历数据字段:
●具有以下功能的日历: - 分秒(不可编程)
- 以12小时或24小时格式显示秒
- 分钟
- 小时
- 一周中的某天 日期)
- 月份(日期)
- 年
●日历采用二进制编码的十进制(BCD)格式
●自动管理28,29-(闰年),30和31天月份
●夏令时 时间调整可由软件编程
- RCT_DR,RTC_TR是RTC日期和时间寄存器。
- 亚秒字段是同步预分频器计数器的值。该字段不可写。软件日历可以是代表秒数的软件计数器(通常为32位长)。软件例程将计数器值转换为小时,分钟,日
MS19524V1
AM PM hh mm s ss周日期月份年份日期
RTC-DR
12小时制或24小时制
RTC_TR RTC_SSR
约会时间
AN3371 STM32高级RTC的概述
Doc ID 018624 Rev 5 7/45
月份,星期几,月份和年份。
这些数据可以转换为BCD格式并显示在标准LCD上,这在使用AM / PM指示器的12小时格式的国家很有用(见图2)。转换例程使用重要的程序存储空间,并且耗费CPU时间,这在某些实时应用程序中可能至关重要。
使用STM32 RTC日历时,不再需要软件转换例程,因为它们的功能是由硬件执行的。 STM32 RTC日历以BCD格式提供。这避免了二进制到BCD软件转换例程,这些例程使用大量的程序存储空间和CPU负载,这在某些实时应用程序中可能至关重要。
1.1.1初始化日历表2介绍了正确配置日历时间和日期所需的步骤。
表2介绍了正确配置日历时间和日期所需的步骤
表2.初始化日历的步骤
1.1.2 RTC时钟配置
RTC时钟源
RTC日历可由三个时钟源LSE,LSI或HSE驱动(见图3和图4)。
注:RTCSEL [1:0]位是RCC控制/状态寄存器(RCC_CSR)[17:16]位
如何调整RTC日历时钟
RTC具有多个预分频器,无论时钟源如何,均可将1 Hz时钟提供给日历单元。
注意:同步预分频器的长度取决于产品。 对于本节,它用13位表示。
计算ck_spre的公式是:
其中:●RTCCLK可以是任何时钟源:HSE_RTC,LSE或LSI
●PREDIV_A可以是1,2,3,...或127
●PREDIV_S可以是0,1,2,...或8191
表3显示了几种获取日历时钟(ck_spre)= 1 Hz的方法。
表3.不同时钟源的日历时钟等于1 Hz
1.对于STM32L1xx,LSI = 37 KHz,但LSI精度不适用于日历应用。
2.对于STM32F2xx和STM32F4xx,LSI = 32 KHz,但LSI精度不适用于日历应用。
-
-
RTC警报
- RTC报警配置
-
RTC警报
STM32 RTC嵌入两个类似的报警,报警A和报警B. 在给定的时间或/和用户编程的日期可以产生警报。 STM32 RTC提供丰富的报警设置组合,并提供许多功能,使配置和显示这些报警设置变得简单。
每个报警单元提供以下功能:
●完全可编程的报警:亚秒(稍后讨论),秒,分钟,小时和日期字段可以独立选择或屏蔽以提供丰富的报警组合。
●发生警报时,可以从低功耗模式退出设备。
●警报事件可以路由到具有可配置极性的特定输出引脚。
●专用报警标志和中断。
- RTC_ALRMAR是一个RTC寄存器。 RTC_ALRMBR寄存器也有相同的字段。
- RT_ARMASSR是一个RTC寄存器。 RTC_ALRMBR寄存器也有相同的字段。
- Maskx是RTC_ALRMAR寄存器中的位,用于启用/禁用用于闹钟A和日历比较的RTC_ALARM字段。 有关更多详细信息,请参阅表5. 4.掩码ss是RTC_ALRMASSR寄存器中的位。 报警由一个与RTC时间计数器长度相同的寄存器组成。 当RTC时间计数器达到报警寄存器中编程的值时,会设置一个标志来指示发生了报警事件。
STM32 RTC报警可以由硬件配置以产生不同类型的报警。 有关更多详细信息,请参阅表5。
编程报警
表4描述了配置警报A所需的步骤。
表4.配置警报的步骤
- 分别为报警B的ALRBE位。
- 分别为报警B的ALRBWF位。
- 分别为报警B的RTC_ALRMBR寄存器。
- 例如,如果警报配置为在3:00:00 PM发生,即使日历时间为15:00:00,也不会发生警报,因为RTC日历格式为24小时格式,警报 是12小时制。
- 分别为报警B的ALRBE位。
- 只有在相应的RTC报警被禁止或RTC初始化模式期间才能写入RTC报警寄存器。
使用MSKx位配置警报行为
可以使用报警A的RTC_ALRMAR寄存器(报警B的RTC_ALRMBR寄存器)的MSKx位(x = 1,2,3,4)来配置报警行为。
表5显示了所有可能的警报设置。 例如,要将闹钟时间配置为星期一23:15:07(假定WDSEL = 1),则必须将MSKx位设置为0000b。 当WDSEL = 0时,除了闹钟掩码字段与星期数而不是星期几之外,所有情况类似,并且MSKx位必须设置为0000b。
表5.报警组合
表5.报警组合(续)
注意:如果选择了秒字段(RTC_ALRMAR或RTC_ALRMBR中的MSK0位复位),则RTC_PRER寄存器中设置的同步预分频器分频因子PREDIV_S必须至少为3以确保正确的行为。
1.2.2警报分秒配置
STM32 RTC单元提供可编程报警,亚秒A和B,类似。 他们产生高分辨率的警
闹钟子秒寄存器中编程的值与日历单元中的秒秒字段的内容进行比较。
亚秒字段计数器从同步预分频器中配置的值递减计数到0,然后在RTC_SPRE
存器中重新加载值。
注意:掩码ss是次秒警报中最重要的位。 这些与同步预分频寄存器进行比较。
警报亚秒可以使用警报亚秒寄存器中的掩码ss位进行配置。 表6:报警子秒掩码组合显示了掩码寄存器的配置可能性,并提供了以下设置的示例:
●选择LSE作为RTC时钟源(例如LSE = 32768Hz)。
●将异步预分频器设置为127.
●将同步预分频器设置为255(日历时钟等于1Hz)。
●将闹钟A亚秒设置为255(在SS [14:0]字段中输入255)。
表6.警报亚秒级掩码组合
注:永远不会比较亚秒寄存器位(15,16和17)中的溢出位。
-
- RTC定期唤醒单元
像许多STMicroelectronics微控制器一样,STM32提供了几种低功耗模式来降低功耗。
STM32具有周期时基和唤醒单元,可在STM32在低功耗模式下工作时唤醒系统。 这个单元是一个可编程的减计数自动重载定时器。 当该计数器达到零时,会产生一个标志和一个中断(如果使能)。
唤醒单元具有以下功能:
●可编程减计数自动重装定时器。
●特定的标志和中断能够从低功耗模式唤醒器件。
●唤醒复用功能输出,可通过可配置的极性发送至RTC_ALARM输出(用于报警A,报警B或唤醒事件的独特触点)。
●全套预分频器可选择所需的等待时间。
1.3.1编程自动唤醒单元
表7 描述配置自动唤醒单元所需的步骤
表7.配置自动唤醒单元的步骤
1.3.2最大和最小RTC唤醒时间
唤醒单元时钟通过RTC_CR1寄存器的WUCKSEL [2:0]位进行配置。 三种不同的配置是可能的:
●配置1:短唤醒周期的WUCKSEL [2:0] = 0xxb(请参见时钟配置1的周期时基/唤醒配置)
●配置2:WUCKSEL [2:0] = 10xb用于中等唤醒周期(请参见周期时基/唤醒 配置时钟配置2)
●配置3:对于较长的唤醒周期,WUCKSEL [2:0] = 11xb(请参见时钟配置3的周期性时基/唤醒配置)
时钟配置1的周期性时基/唤醒配置图8显示了预分频器与时基/唤醒单元的连接,表8给出了对应于配置1的时基/唤醒时钟分辨率。
时钟配置1的周期性时基/唤醒配置
预分频器取决于唤醒时钟选择:
●WUCKSEL [2:0] = 000:选择RTCCLK / 16时钟
●WUCKSEL [2:0] = 001:选择RTCCLK / 8时钟
●WUCKSEL [2:0] = 010 :选择RTCCLK / 4时钟
●WUCKSEL [2:0] = 011:选择RTCCLK / 2时钟
当RTCCLK = 32768 Hz时,最小时基/唤醒分辨率为61.035mu;s,最大分辨率为488.28mu;s。 结果:
●最小时基/唤醒周期为(0x0001 1)x 61.035mu;s= 122.07mu;s。 WUCKSEL [2:0] = 011b(fRTCCLK / 2)不能将时基/唤醒定时器计数器WUT [15:0]设置为0x0000,因为禁止此配置。 有关更多详细信息,请参阅STM32参考手册。
●最大时基/唤醒时间为(0xFFFF 1)x 488.28mu;s= 2 s。
时钟配置2的周期性时基/唤醒配置
图9显示了预分频器与时基/唤醒单元的连接,表9给出了与配置2相对应的时基/唤醒时钟分辨率。
当RTCCLK = 32768 Hz时,配置2的最小分辨率为61.035mu;s,最大分辨率为32s。 结果:
●最小时基/唤醒周期为(0x0000 1)x 61.035mu;s= 122.07mu;s。
●最大时基/唤醒时间为(0xFFFF 1)x 32 s = 131072 s(超过36小时)。
时钟配置3的周期性时基/唤醒配置
对于此配置,分辨率与配置2相同。但是,对于配置2,时基/唤醒计数器将从0x1FFFF开始下降到0x00000,而不是0xFFFF到0x0000。当RTCCLK = 32768时,
●最小时基/唤醒周期为:(0x10000 1)x
全文共8048字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[15251],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。