蓝桥杯嵌入式学习STM32之RTC时钟原理及配置

RTC时钟原理

单片机内部有一块断电不丢失的寄存器(由额外电池一般是纽扣电池供电),每隔1s加1,然后记录的是与1970年1月1日0时的秒差。

工作原理细解

RTC模块的一些配置是被一个叫做后备区域保护着(禁止写),所以设置之前要先取消后备区域写保护。
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置
首先RTC CLK有三个来源。最主要的是外部低速晶振。其他两个来源我懒得打了,可以参考时钟讲解
RTC_DIV会随着预装载得值减到0然后产生一个脉冲。也就是预分频啦,将TR_CLK搞成1s的周期,同时重装载。
RTC_CNT就是记录目前离1970年的秒数。
旁边的三个依次是:秒中断,溢出中断,闹钟中断。

注意:RTC的寄存器是一个很独立的寄存器,我们可以通过APB1去访问它。但是访问回来的值只有在RTC和APB1时钟同步的情况下才是准确的。

BKP备份寄存器

里面有42个寄存器存放一些数据,这些数据不丢失(因为不断电)。
你可以往里面放一下校正值什么的,类似于储物柜。

相关寄存器

RTC控制寄存器 (RTC_CRH, RTC_CRL)
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置
①修改CRH/CRL寄存器,必须先判断RSF位,确定已经与APB1同步。
②修改CNT,ALR,PRL的时候,必须先配置CNF位进入配置模式,修改完之后,设置CNF位为0退出配置模式

③同时在对RTC相关寄存器写操作之前,必须判断上一次写操作已经结束,也就是判断RTOFF位是否置位。

RTC预分频装载寄存器 (RTC_PRLH, RTC_PRLL)
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置

RTC预分频余数寄存器 (RTC_DIVH, RTC_DIVL)
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置
RTC计数器寄存器 (RTC_CNTH, RTC_CNTL)
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置
RTC闹钟寄存器 (RTC_ALRH ,RTC_ALRL)
蓝桥杯嵌入式学习STM32之RTC时钟原理及配置

配置流程

第一次配置
代码就不贴啦

  1. 使能RCC时钟(电源,后备区域)
  2. 获得后备区访问权限
  3. 设置RTC时钟沿
  4. 等待RTC时钟与APB1同步
  5. (中间穿插等待写结束)
  6. 搞些中断啊(因为中断在CR寄存器,不需要申请下面的配置请求)
  7. 申请配置请求
  8. 配置CNT ALR PRL
  9. 关闭配置请求

心得

  1. 与RTC同步判断只要一次就行,放在前面,确保处在同步状态下。对CR寄存器进行操控的时候确保寄存器里的值是准确得,防止系统刚启动或复位或更换RTC时钟源的情况发生,此时APB1和RTC时钟还没有同步。
  2. 读RTC寄存器或者准备修改的话一定要等到同步以后才可以。