英语原文共 45 页
AN3371应用注解
硬件实时时钟(RTC)在STM32 F0、F2、F3、F4和MCUs中L1系列的使用
介绍:实时时钟(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之间。
超低功耗高(ULPH)密度器件是STM32L151xx,STM32L152xx和STM32L162xx微控制器,其闪存密度为384 KB。
F2系列器件是STM32F205xx,STM32F207xx,STM32F215xx和STM32F217xx微控制器。
STM32F3xx是指STM32F30x,STM32F31x,STM32F37x和STM32F38x器件。
F4系列是STM32F405xx,STM32F407xx,STM32F415xx和STM32F417xx微控制器。
F0系列器件是微控制器。
表1列出了本应用注释所涉及的微控制器。
类型 |
适用产品 |
微控制器 |
STM32 F0 STM32 F2 STM32 F3 (STM32F30x, STM32F31x, STM32F37x, STM32F38x) STM32 F4 (STM32F405xx, STM32F407xx, STM32F415xx, STM32F417xx) STM32 L1 |
表1.适用的产品
1 STM32高级RTC概述
嵌入STM32微控制器的实时时钟(RTC)充当独立的BCD定时器/计数器。 RTC可用于提供全功能的日历,闹钟,定期唤醒单元,数字校准,同步,时间戳和高级篡改检测。
有关每个设备上可用功能的完整列表,请参阅表15:高级RTC功能。
RTC 日历
日历记录时间(小时,分钟和秒)和日期(日,周,月,年)。 STM32 RTC日历提供了多种功能,可以轻松配置和显示日历数据字段:
-
日历:
- 亚秒(不可编程)
- 秒
- 分钟
- 12小时或24小时格式的小时
- 星期几(周几)
- 月中的某天(日期)
- 月份
- 年份 - 二进制编码的十进制(BCD)格式的日历
- 自动管理28-,29-(闰年),30-和31天的月份
- 夏令时调整由软件编程
图1 RTC日历字段
1. RCT_DR,RTC_TR是RTC日期和时间寄存器。
2. sub-second字段是同步预分频器计数器的值
软件日历可以是软件计数器表示秒数(通常为32位长)。 软件例程将计数器值转换为小时,分钟,月中的某天,星期几,月份和年份。这些数据可以转换为BCD码并显示在标准LCD上,这对于使用带有AM / PM指示的12小时格式的国家非常有用(参见图2)。转换例程使用大量的程序存储空间,并且耗费CPU时间,这在某些实时应用程序中可能至关重要。
在使用STM32 RTC日历时,不再需要软件转换例程,因为它们的功能由硬件执行。
STM32 RTC日历以BCD码提供。这避免了二进制到BCD软件转换过程,而这种过程使用大量程序存储空间和CPU负载,这在某些实时应用程序中可能是至关重要的。
11:15:28:09 PM
WED OCT 26 2011
图2 LCD上的日历显示示例
初始化日历
表2描述了正确配置日历时间和日期所需的步骤。
步骤 |
目的 |
方法 |
评价 |
1 |
禁用RTC寄存器写保护 |
将“0xCA”“0x53”写入RTC_WPR寄存器 |
可以修改RTC寄存器 |
2 |
进入初始化模式 |
在RTC_ISR寄存器中将INIT位设置“1” |
日历计数器停止以允许更新 |
3 |
等待初始化模式的确认(时钟同步) |
轮询RTC_ISR中的INITF位,直到它被设置为止 |
对于中等密度设备,大约需要2个RTCCLK时钟周期 |
4 |
如果需要,编程预分频器寄存器 |
RTC_PRER寄存器:首先写入同步值和 |
默认情况下,当RTCCLK = 32768Hz时,RTC_PRER预分频器寄存器初始化为日历单元提供1Hz |
5 |
在影子寄存器中加载时间和日期值 |
设置RTC_TR和RTC_DR寄存器 |
|
6 |
配置时间格式(12h或24h) |
在RTC_CR寄存器中设置FMT位Set |
FMT = 0: 24小时/天格式FMT = 1:AM / PM小时格式 |
7 |
退出初始化模式 |
清除RTC_ISR寄存器中的INIT位 |
当前日历计数器自动加载,计数在4个RTCCLK时钟周期后重新开始 |
8 |
使能RTC寄存器写保护 |
将“0xFF”写入RTC_WPR寄存器 |
RTC寄存器不能再被修改 |
表2 正确配置日历时间和日期所需的步骤。
RTC时钟配置
RTC时钟源
RTC日历可以由三个时钟源LSE,LSI或HSE驱动(参见图3和图4)
图3. STM32L1xx RTC时钟源
注:RTCSEL [1:0]位是RCC控制/状态寄存器(RCC_CSR)[17:16]位
图4. STM32F2xx或STM32F4xx RTC时钟源
如何调整RTC日历时钟
RTC具有多个预分频器,无论时钟源如何,都可以向日历单元提供1 Hz时钟。
RTC
时钟
图5.从RTC时钟源到日历单元的预分频器
注意:同步预分频器的长度取决于产品。对于本节,它以13位表示。
计算ck_spre的公式是: ck_spre =RTCCLK/ PREDIV_A 1 /PREDIV_S 1
其中:
RTCCLK可以是任何时钟源:HSE_RTC,LSE或LSI
PREDIV_A可以是1,2,3,......或127
PREDIV_S可以是0,1,2,...,或8191
RTCCLK 时钟源 |
Prescalers |
ck_spre |
|
PREDIV_A[6:0] |
PREDIV_S[12:0] |
||
HSE_RTC = 1MHz |
124 (div125) |
7999 (div8000) |
1 Hz |
LSE = 32.768 kHz |
127 (div128) |
255 (div256) |
1 Hz |
LSI = 32 kHz(1) |
127 (div128) |
249 (div250) |
1 Hz |
LSI = 37 kHz(2) |
124 (div125) |
295 (div296) |
1 Hz |
表3显示了获取日历时钟(ck_spre)= 1 Hz的几种方法。
表3.具有不同时钟源的日历时钟等于1 Hz的几种方法
1.对于STM32L1xx,LSI = 37 KHz,但LSI精度不适合日历应用。
2.对于STM32F2xx和STM32F4xx,LSI = 32 KHz,但LSI精度不适合日历应用。
RTC报警
RTC报警配置
STM32 RTC嵌入了两个报警,报警A和报警B,它们是相似的。可以在用户编程的给定时间或/和日期生成警报。
STM32 RTC提供丰富的报警设置组合,并提供许多功能,使配置和显示这些报警设置变得容易。
每个报警单元都提供以下功能:
完全可编程警报:亚秒(稍后讨论),可以独立选择或屏蔽秒,分,小时和日期字段,以提供丰富的警报组合。
发生报警时,能够从低功耗模式退出设备。
报警事件可以路由到具有可配置极性的特定输出引脚。
专用报警标志和中断。
图6.警报A字段
1. RTC_ALRMAR是RTC寄存器。 RTC_ALRMBR寄存器也可以使用相同的字段。
2. RT_ARMASSR是RTC寄存器。 RTC_ALRMBR寄存器也可以使用相同的字段。
3. Maskx是RTC_ALRMAR寄存器中的位,用于启用/禁用用于报警A和日历比较的RTC_ALARM字段。有关更多详细信息,请参阅表5。
4.掩码ss是RTC_ALRMASSR寄存器中的位。
报警由一个与RTC时间计数器长度相同的寄存器组成。当RTC时间计数器达到报警寄存器中设定的值时,将设置一个标志以
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。