英语原文共 45 页,剩余内容已隐藏,支付完成后下载完整资料
1 STM32高级RTC概述
STM32 微控制器中嵌入的实时时钟 (RTC) 作为独立的BCD 计时器/计数器。RTC 可用于提供全功能日历、闹钟、定期唤醒单元、数字校准、同步、时间戳和高级篡改检测。
有关每个功能上可用的功能的完整列表,请参阅表 15:高级 RTC 功能
装置。
1.1 RTC日历
日历跟踪时间(小时、分钟和秒)和日期(天、周、月,年)。STM32 RTC 日历提供了多种功能,可轻松配置和显示日历数据字段:
● 日历:
- 亚秒(不可编程)
- 秒
- 分钟
- 以12小时或24小时表示的小时
- 星期几
- 当月几号
- 月份
- 年份
● 二进制编码小数 (BCD) 格式的日历
● 自动管理天数为28,29(闰年),30,31天的月份
● 夏令时间调整可通过软件编程
图1. RTC日历区域
- RCT_DR,RTC_TR是 RTC 日期和时间寄存器。
- 亚秒字段是同步预分频计数器的值,此字段不可写。
软件日历可以用软件计数器(通常为32位)来表示秒数。软件例程将计数器值转换为小时、分钟、天月、星期和日、月和年。此数据可以转换为 BCD 格式并且显示在标准 LCD 上,这在使用12小时制的国家/地区非常有用,AM/PM指标(参见图2)。转换例程使用重要的程序内存空间且占用 CPU 时间,这对于某些实时应用程序可能至关重要。
当使用STM32 RTC日历时,则不再需要软件转换例程,由硬件执行它们的功能。
STM32 RTC 日历以 BCD 格式提供。这避免了二进制到BCD软件转换流程,它使用重要的程序内存空间和 CPU 负载,这可能在某些实时应用中至关重要。
图2. 液晶显示屏上的日历显示示例
1.1.1 初始化日历
在表2中进行了正确配置日历时间和日期所需的步骤的相关描述。
表2 初始化日历的步骤
1.1.2 RTC 时钟配置
RTC 时钟源
RTC 日历可以由三个时钟源 LSE、LSI 或 HSE 驱动(参见图 3 和图4)。
图 3.STM32L1xx RTC 时钟源
注意:RTCSEL[1:0]bits是RCC控制/状态寄存器(RCC_CSR) [17:16]bits
图 4.STM32F2xx 或 STM32F4xx RTC 时钟源
如何调整 RTC 日历时钟
RTC 具有多个预缩放器,无论时钟源如何,都允许将 1 Hz 时钟传送到日历单元。
图 5.从 RTC 时钟源到日历单元的预缩放器
注意:同步预缩放器的长度取决于产品并以13bits表示。
计算ck_spre的公式是:
其中:
bull; RTCCLK 可以是任何时钟源:HSE_RTC、LSE或LSI
bull; PREDIV_A可以是 1,2,3,..., 或 127
bull; PREDIV_S可以是 0,1,2,..., 或 8191
表3显示了获取日历时钟(ck_spre)=1Hz的几种方法。
表3.日历时钟等于1Hz 的不同时钟源
1. 对于 STM32L1xx,LSI = 37 KHz,但LSI精度不适合日历应用。
2. 对于 STM32F2xx 和 STM32F4xx,LSI = 32 KHz,但LSI精度不适合日历应用。
1.2 RTC 报警
1.2.1 RTC 报警配置
STM32 RTC嵌入了两个类似的报警器,报警器A和报警器B。报警器可以在给定时间或/和用户编程的日期生成。
STM32 RTC提供了丰富的报警设置组合,并提供许多功能,便于配置和显示这些警报设置。
每个报警单元提供以下功能:
bull; 完全可编程报警:次秒(稍后讨论),秒,分钟,可以独立选择或屏蔽小时和日期字段,以提供丰富的警报的组合。
bull; 能够在报警发生时从低功耗模式退出设备。
bull; 报警事件可以路由到具有可配置极性的特定输出引脚。
bull; 专用报警标志和中断。
图 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 时间计数器达到报警寄存器中编程的值,标志显示发生了报警事件。
STM32 RTC报警器可以由硬件配置,以生成不同类型的警报。有关详细信息,请参阅表 5。
报警器编程
表4描述了配置报警器A所需的步骤。
表4.配置警报的步骤
1. ALRBE位用于报警器B。
2. ALRBWF位用于报警器B。
3. RTC_ALRMBR登记报警器B。
4. 例如,如果将报警事件设置为在下午 3:00:00 发生,则使日历时间为15:00:00,因为RTC日历为24小时格式,警报格式为12小时格式。
5. ALRBE位用于报警器B。
6. RTC报警寄存器只能在禁用相应的 RTC 警报或 RTC 期间写入初始化模式。
使用MSKx位配置报警行为
报警行为可以使用 MSKx 位(x = 1、2、3、4)配置。RTC_ALRMAR寄存器用于报警器A(RTC_ALRMBR寄存器用于报警器B)。
表 5 显示了所有可能的报警设置。例如,将报警时间配置为周一 23:15:07(假设 WDSEL = 1),MSKx 位必须设置为 0000b。当 WDSEL = 0 时,所有情况都类似,只不过'Alarm Mask'是当月几号,而不是星期几,并且MSKx位必须设置为0000b。
表5.报警组合
表5.报警组合(续)
注意:如果选择了秒字段(MSK0 位重置RTC_ALRMAR或RTC_ALRMBR),则同步预分频除法器PREDIV_S在RTC_PRER寄存器中必须至少设置3个以确保正确的运行。
1.2.2 报警子秒配置
STM32 RTC 单元提供两个类似的可编程次秒报警器A和B。它们以高分辨率生成警报(对于第二个分区)。
警报次秒寄存器中编程的值对应日历单元中的次秒字段。
次秒字段计数器从同步中配置的值倒计时将预缩放器预缩放为零,然后在RTC_SPRE寄存器中重新加载值。
图7.报警器次秒部分
注意:掩码ss是次秒警报中最重要的位,对应于同步预缩放寄存器。
可以使用报警子秒中的掩码位配置报警次秒注册。表 6:报警子秒掩码组合显示了对于掩码寄存器的配置可能性,并提供具有以下设置的示例:
bull;选择 LSE 作为 RTC 时钟源(例如 LSE = 32768 Hz)。
bull;将异步预缩放器设置为 127。
bull;将同步预缩放器设置为 255(日历时钟等于 1Hz)。
bull;将警报设置为 255 秒(将 255 放在 SS[14:0] 字段中)。
表6. 报警子秒掩码组合
注意:次秒寄存器位(15、16 和 17)中的溢出位不是相对应的。
1.3 RTC单元周期性唤醒
与许多 ST 微电子微控制器一样,STM32提供多种低功耗降低功耗的模式。
STM32具有定期的时间库和唤醒单元,当STM32在低功耗模式下工作时,可唤醒系统。此单元是可编程的向下计数自动重新加载计时器。当此计数器达到零时,标志和中断(如果启用)生成。
唤醒装置具有以下功能:
bull;可编程的倒计时自动载入计时器。
bull;能够从低功耗模式下唤醒设备的特定标志和中断。
bull;唤醒备用函数输出,可路由到RTC_ALARM输出(唯一具有可配置极性的报警器A、报警器B或唤醒事件。
bull;一套完整的预缩放器,用于选择所需的等待期。
1.3.1 自动唤醒单元编程
表 7 描述了配置自动唤醒单元所需的步骤。
表7.配置自动唤醒单元的步骤
1.3.2 STM32 高级 RTC 概述
最大和最短的RTC唤醒周期唤醒单元时钟通过WUCKSEL[2:0]位RTC_CR1寄存器进行配置。
可以进行三种不同的配置:
bull; 配置 1:对于短唤醒周期,WUCKSEL[2:0] = 0xxb(有关时钟配置 1,请参阅定期时间库/唤醒配置)
bull; 配置 2:对于中等唤醒周期,WUCKSEL[2:0] = 10xb(有关时钟配置 2,请参阅定期时间库/唤醒配置)
bull; 配置 3:对于长唤醒周期,WUCKSEL[2:0] = 11xb,(有关时钟配置 3,请参阅定期时间库/唤醒配置)
时钟配置的周期时基/唤醒配置 1
图 8 显示了到时基/唤醒单元的预缩放器连接,表 8 给出了
与配置 1 对应的时间基/唤醒时钟分辨率。
预缩放器取决于唤醒时钟选择:
bull; WUCKSEL[2:0] =000:选择RTCCLK/16时钟
bull; WUCKSEL[2:0] =001:选择RTCCLK/8时钟
bull; WUCKSEL[2:0] =010:选择RTCCLK/4时钟
bull; WUCKSEL[2:0] =011:选择RTCCLK/2时钟
图 8.连接到配置1的时基/唤醒单元的预缩放器
表8.时钟配置1的时基/唤醒单元周期分辨率
当RTCCLK=32768Hz时,最小时基/唤醒分辨率为61.035mu;s,并且
最大分辨率为488.28mu;s。因此:
bull; 最小时间基数/唤醒周期为(0x0001 = 1)x 61.035mu;s =122.07mu;s。时基/唤醒计时器计数器WUT[15:0]不能设置为0x0000与WUCKSEL_2:0_011b (fRTCCLK/2),因为此配置是被禁止的。请参阅有关更多详细信息的STM32参考手册。
bull; 最大时基/唤醒周期为(0xFFFF= 1)x 488.28 mu;s = 2 s。
时钟配置的周期时间基/唤醒配置 2
图9显示了到时基/唤醒单元的预分频器连接,表9给出了与配置2对应的时间基/唤醒时钟分辨率。
图 9.连接到唤醒单元的预分频器,用于配置 2 和 3
表9.时钟配置2对应的时基/唤醒单元周期分辨率
1. PREDIV_A中等密度设备上的最小值为'1'。
当 RTCCLK= 32768 Hz 时,配置 2 的最小分辨率为 61.035 mu;s,并且
最大分辨率为 32s。
因此:
bull; 最小时间基数/唤醒周期为 (0x0000 = 1) x 61.035 mu;s = 122.07 mu;s。
bull; 最大时间基/唤醒周期为 (0xFFFF= 1) x 32 s = 131072 s(超过36 小时)。
时钟配置的周期时基/唤醒配置 3
对于此配置,分辨率与配置 2 的分辨率相同。但是,时间基/唤醒计数器停机时间从 0x1FFFF 开始到 0x00000,而不是0xFFFF 到 0x000,用于配置 2。
当 RTCCLK= 32768 时,
bull; 最短时间基数/唤醒周期为:
(0x1000 times; 1) x 61.035 mu;s = 250.06 ms
bull; 最长时间基/唤醒周期为:
(0x1FFFF= 1) x 32 s = 4194304 s(超过 48 天)。
时基/唤醒周期极值的总结
当 RTCCLK= 32768 Hz 时,最小值和最大周期值,具体取决于配置,相关数据见表10。
表10.最小值和最大值RTCCLK= 32768 时的时基/唤醒周期配置
1. 这些数值是在RTCCLK = 32768 Hz时计算的。
1.4 RTC 数字校准
1.4.1 RTC 粗校准
数字粗校准可通过在输出异步预缩放器 (ck_apre)添加(正校准)或屏蔽(负校准)时钟周期,以补偿晶体的误差。
可执行负校准的分辨率约为 2 ppm,且为正校准的分辨率约为 4 ppm。最大校准范围从 -63 ppm 到 126 ppm。
图10.粗校准模块
您可以使用AFO_CALIB计算时钟偏差,然后更新校准模块。它无法检查校准结果,因为 512 Hz 输出在校准模块之前。您可以检查校准结果的某些产品,因为
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[238142],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。