RTC
一.RTC简单介绍
RTC好比我们用来记录时间的一个钟表,他里面有年月日,还可以记录星期,小时,分钟等。是Real Time Clock的缩写,译为实时时钟,本质上是一个独立的定时器。
1. 1 与通用定时器的区别
- 可以在后备电源下工作,主电源掉电以后,单片机内部电源还会继续给RTC提供电源,保持其正常运行。
- 计数器符合年、月、日、星期、时、分、秒、等日期的时间技术规则,例如它可以区分是不是闰年还有大小月份。
- 不受复位信号影响,例如主电源上电过程会有一个复位效果,但是RTC不会受其影响。
- 低功耗计时,通常电流是uA。最典型的就是我们电脑主板内部的RTC。
1.2 常见的独立RTC芯片
- PCF8563,NXP公司的,I2C接口
- DS1302,MAX公司的,两线串行接口
- DS3231, MAX公司的,I2C接口,内置高精度时钟信号源,常温范围内5ppm(百万分之一)精度,普通柱状晶体是20ppm,且容易受温度影响。
1.3 RTC在实际项目中的应用
- 为用户提供时间,日期
- 实现时间记录功能,比如安全监控项目
- 实现按时间要求的相关任务,比如按约定时间控制相关水闸等
- 实现周期性的唤醒,执行相关的周期性任务
2. STM32F407上的RTC
2.1 主要特点
先列一张RTC的部分结构框图,再结合框图进行分析。
- 是一个独立的BCD(二进制转换成十进制)定时器,例如今天是30号,读出来的数据是0x30,但是转成16进制就是0x1E。
- 此外还可以提供亚秒,系统自动将月份补偿为28、29(闰年)、30和31天
- 软件可编程夏令时补偿(高纬度地方,夏天天亮的早,人为的加快一个小时)
- 两个具有中断功能的可编程闹钟,可以通过任意日历字段的组合驱动闹钟
- 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断
- 参考时钟检测:可使用更加精确的第二时钟源来提高精度
- 利用亚秒级移位特性与外部时钟实现精确同步
- 用于事件保存的时间戳功能,指的是单片机上的一个IO口检测到电平的变化的时候,会将这个变化时间记录
- 入侵检测:2个带可配置过滤器和内部上拉的入侵事件,出于对产品数据的保密,敏感数据可以保存在ram里面,由备用电源供电,给这个产品放一个壳,一旦拆开这个壳,就会被检测到,然后自动清除ram数据。
10.可屏蔽中断或事件:闹钟A、闹钟B、唤醒中断、时间戳、入侵检测 - 数字校准电路:粗调(5ppm),细调(0.95ppm)
- 20个备份寄存器(80字节)。
- 复用功能输出:1.512Hz或1Hz时钟输出(LSE频率为32.768KHz),2. RTC_ALARM(闹钟A、闹钟B或唤醒)
- 复用功能输入:1.RTC_TS:时间戳事件检测,2.RTC_TAMP1:TAMPER1事件检测,3.RTC_TAMP2:TAMPER2事件检测,4.RTC_REFIN:参考时钟源输入
2.2后备电源
纽扣电池经过一个二极管,防止主电源给电池充电,同时还要经过一个二极管,防止电池给整个单片机供电。示意图如下:
2.3 时钟和预分频器
看图可以发现有两个额外的脚PC14,PC15,这两个脚如果先用我们的RTC,最好接一个片外的石英晶体(32.768KHz),为什么是32.768,因为它是2的15次方,通过分配可以精确到1Hz。,在看,到RTC有三条路,一条是32KHz,不好的地方是误差大。第二个是正道,还一个是歪道(系统时钟分配过来的)。示意图如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/70c6639210c1a8df594a418acace8f3e.jpeg#pic_center)
2.4 实时时钟和日历
- RTC日历时间和日期寄存器可通过与PCLK1(APB1时钟)同步的影子寄存器来访问,APB时钟频率必须至少为RTC时钟频率的7倍
- 时间和日期寄存器可以直接访问
- RTC_SSR对应与亚秒
- RTC_TR对应于时间
- RTC_DR对应于日期
- 每隔两个RTCCLK周期,便将当前日历值复制到影子寄存器里面去
2.5可编程闹钟
- 可通过将RTC_CR寄存器中的ALRAE和ALRBE位置1来使能可编程闹钟功能
- 如果日历亚秒、秒、分钟、小时、日期或日分别与闹钟寄存器中编程的值相匹配,则ALRAF,ALRBF标志就会变成1
- 闹钟A和闹钟B在使能后,可连接到RTC_ALARM输出,且输出极性可设
差不多就到这里来了。