STM32学习笔记之RTC实时时钟1

** 简述**
stm32 的实时时钟(rtc)是一个独立的定时器。 stm32 的 rtc 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
rtc 模块和时钟配置系统 (rcc_bdcr 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 rtc 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 rtc,以防止对后备区域 (bkp) 的意外写操作。所以在要设置时间之前, 先要取消备份区域(bkp)写保护。
rtc 由两个主要部分组成(参见上图), 第一部分(apb1 接口)用来和 apb1 总线相连。此单元还包含一组 16 位寄存器,可通过 apb1 总线对其进行读写操作。 apb1 接口由 apb1 总线时钟驱动,用来与 apb1 总线连接。
另一部分 (rtc 核心) 由一组可编程计数器组成,分成两个主要模块。第一个模块是 rtc 的预分频模块,它可编程产生 1 秒的 rtc 时间基准 tr_clk。 rtc 的预分频模块包含了一个 20 位的可编程分频器 (rtc 预分频器)。如果在 rtc_cr 寄存器中设置了相应的允许位,则在每个tr_clk 周期中 rtc 产生一个中断(秒中断)。第二个模块是一个 32 位的可编程计数器,可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算,可以记录 4294967296 秒,约合 136 年左右。
rtc 还有一个闹钟寄存器 rtc_alr,用于产生闹钟。系统时间按 tr_clk 周期累加并与存储在 rtc_alr 寄存器中的可编程时间相比较,如果 rtc_cr 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。rtc 内核完全独立于 rtc apb1 接口,而软件是通过 apb1 接口访问 rtc 的预分频值、计数器值和闹钟值的。但是相关可读寄存器只在 rtc apb1 时钟进行重新同步的 rtc 时钟的上升沿被更新, rtc 标志也是如此。这就意味着,如果 apb1 接口刚刚被开启之后,在第一次的内部寄存器更新之前,从 apb1 上读取的 rtc 寄存器值可能被破坏了(通常读到 0)。因此,若在读取 rtc 寄存器曾经被禁止的 rtc apb1 接口,软件首先必须等待 rtc_crl 寄存器的 rsf位(寄存器同步标志位, bit3)被硬件置 1。
2. rtc 寄存器介绍
2.1 rtc 的控制寄存器——rtc_crh 寄存器
该寄存器用来控制中断的。
2.2 rtc 的控制寄存器——rtc_crl 寄存器
rtc 用到的是该寄存器的 0、 3~5 这几个位,第 0 位是秒钟标志位,我们在进入闹钟中断的时候,通过判断这位来决定是不是发生了秒钟中断。然后必须通过软件将该位清零(写 0)。第 3 位为寄存器同步标志位,我们在修改控制寄存器 rtc_crh/crl 之前,必须先判断该位,是否已经同步了,如果没有则等待同步,在没同步的情况下修 rtc_crh/crl 的值是不行的。第 4 位为配置标位,在软件修改 rtc_cnt/rtc_alr/rtc_prl 的值的时候,必须先软件置位该位,以允许进入配置模式。第 5 位为 rtc 操作位,该位由硬件操作,软件只读。通过该位可以判断上次对 rtc 寄存器的操作是否完成,如果没有,我们必须等待上一次操作结束才能开始下一次操作。
2.3 rtc 预分频装载寄存器——rtc_prlh 寄存器
这两个寄存器用来配置 rtc 时钟的分频数的,比如我们使用外部 32.768k 的晶振作为时钟的输入频率,那么我们要设置这两个寄存器的值为 32767,以得到一秒钟的计数频率。
2.4 rtc 预分频装载寄存器——rtc_prll 寄存器
2.5 rtc 预分频器余数寄存器——rtc_divh 寄存器
2.6 rtc 预分频器余数寄存器——rtc_divh 寄存器
这两个寄存器的作用就是用来获得比秒钟更为准确的时钟,比如可以得到 0.1 秒,或者 0.01 秒等。该寄存器的值自减的,用于保存还需要多少时钟周期获得一个秒信号。在一次秒钟更新后,由硬件重新装载。
2.7 rtc 计数器寄存器——rtc_cnt 寄存器
该寄存器由 2 个 16 位的寄存器组成 rtc_cnth 和 rtc_cntl,总共 32 位,用来记录秒钟值(一般情况下)。在修改这个寄存器的时候要先进入配置模式。
2.8 rtc 计数器寄存器——rtc 闹钟寄存器
该寄存器也是由 2 个 16 位的寄存器组成 rtc_alrh 和 rtc_alrl。总共也是 32 位,用来标记闹钟产生的时间(以秒为单位),如果 rtc_cnt 的值与 rtc_alr 的值相等,并使能了中断的话,会产生一个闹钟中断。该寄存器的修改也要进入配置模式才能进行。
3. 备份寄存器介绍
备份寄存器是 42 个 16 位的寄存器(mini 开发板就是大容量的),可用来存储 84 个字节的用户应用程序数据。他们处在备份域里,当 vdd 电源被切断,他们仍然由 vbat 维持供电。即使系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位。
复位后,对备份寄存器和 rtc 的访问被禁止,并且备份域被保护以防止可能存在的意外的
写操作。执行以下操作可以使能对备份寄存器和 rtc 的访问:
(1)通过设置寄存器 rcc_apb1enr 的 pwren 和 bkpen 位来打开电源和后备接口的时钟;
(2)电源控制寄存器 (pwr_cr) 的 dbp 位来使能对后备寄存器和 rtc 的访问。
一般用 bkp 来存储 rtc 的校验值或者记录一些重要的数据,相当于一个 eeprom,不过这个 eeprom 并不是真正的 eeprom,而是需要电池来维持它的数据。
rtc 的时钟源选择及使能设置都是通过这个寄存器来实现的,所以我们在 rtc 操作之前先要通过这个寄存器选择 rtc 的时钟源,然后才能开始其他的操作。
4. rtc 配置步骤
(1) 使能电源时钟和备份区域时钟
rcc_apb1periphclockcmd(rcc_apb1periph_pwr | rcc_apb1periph_bkp, enable);(2) 取消备份区写保护
pwr_backupaccesscmd(enable); //使能 rtc 和后备寄存器访问(3) 复位备份区域,开启外部低速振荡器。
bkp_deinit();//复位备份区域(4) 选择 rtc 时钟,并使能
rcc_rtcclkconfig(rcc_rtcclksource_lse); //选择 lse 作为 rtc 时钟(rcc_rtcclksource_lsi 和 rcc_rtcclksource_hse_div128)rcc_rtcclkcmd(enable); //使能 rtc 时钟(5) 设置 rtc 的分频,以及配置 rtc 时钟
在开启了 rtc 时钟之后,我们要做的是设置 rtc 时钟的分频数,通过 rtc_prlh 和rtc_prll 来设置,然后等待 rtc 寄存器操作完成,并同步之后,设置秒钟中断。然后设置 rtc 的允许配置位(rtc_crh 的 cnf 位),设置时间(其实就是设置rtc_cnth 和 rtc_cntl两个寄存器)。
rtc_enterconfigmode();/// 允许配置rtc_exitconfigmode();//退出配置模式,更新配置void rtc_setprescaler(uint32_t prescalervalue);void rtc_itconfig(uint16_t rtc_it, functionalstate newstate);//rtc_itconfig(rtc_it_sec, enable); //使能 rtc 秒中断void rtc_setcounter(uint32_t countervalue)最后在配置完成之后(6) 更新配置,设置 rtc 中断分组
设置完时钟之后,我们将配置更新同时退出配置模式,这里还是通过 rtc_crh 的 cnf 来实现。
rtc_exitconfigmode();//退出配置模式,更新配置在退出配置模式更新配置之后我们在备份区域 bkp_dr1 中写入 0x5050 代表我们已经初始化过时钟了,下次开机(或复位)的时候,先读取 bkp_dr1 的值,然后判断是否是 0x5050 来决定是不是要配置。接着我们配置 rtc 的秒钟中断,并进行分组。
void bkp_writebackupregister(uint16_t bkp_dr, uint16_t data);//往备份区域写用户数据uint16_t bkp_readbackupregister(uint16_t bkp_dr);//读取备份区域指定寄存器(7) 编写中断服务函数
流程图:

安达发|APS高级排程系统界的天花板!
购并Volterra Maxim跨足云端电源管理市场
碳纳米管来制造硅阳极锂离子电池,开拓锂离子电池电极材料的使用
基于RT-Thread+RA6M4的智能锁设计案例
无损压缩算法有哪些
STM32学习笔记之RTC实时时钟1
芯闻动态:高通诉苹果侵犯专利再开庭、华为将在2019年中期推出5G手机、到2025年中国会有6.7亿人使用5G
振弦采集模块VMTool配置工具
华为智慧屏S系列正式发布:久用久新,十年不过时
爱立信携手Qualcomm成功为5G商用部署增加了一个新的频段
智慧公安情报研判系统搭建大数据可视化分析系统开发
半导体营收5年升3成 因为有它
MLO初体验:AR眼镜领域的“灯厂”
电线电缆导体材料的选择以及它的应用场合
对于以太网交换机有什么用你真的了解吗
双杰电气智能电网高端装备研发制造基地项目正式落户长丰
如何在i.MX RT11xx系列上使能ETM Trace
索尼首款电动车Vision-S已上路 并非意味着其要进军汽车制造业
一位软件工程师辛酸历程
铠侠与西数218层3D NANDFlash出货 年内量产