STM32 RTC(三)原理

RTC(Real Time Clock)实时时钟,是一个独立的定时器,为系统提供时钟和日历。RTC和时钟配置系统是属于后备区域的,跟BKP寄存器一样,复位不清零,VDD断电由VBAT供电,若两者都没有,数据将会丢失。

下面看一个图94e7707a907f4ecbb49becbffbbfe1bb.png

这是32时钟树截取下来的一部分,从图中可以看到RTCCLK(RTC Clock) 有三个来源,分别为

1、HSE(Hight Speed External)高速外部时钟,经过128分频提供给RTC当作时钟,而HSE的输入是4-16MHZ的OSC(Oscillator[振荡器])。

2、LSE(Low Speed External)低速外部时钟,LSE的输入是32.768kHZ的OSC,那么为什么是32.768k,那是因为2^15=32768,分频的话将会更加简便,被广泛应用。

3、LSI(Low Speed Internal)低速内部时钟,固定为40KHZ。

HSE、LSI只是RTC的备选方案,HSE是专门用来提供32的系统时钟的,而LSI则是专门给IWDG(Independent Watch Dog)提供时钟的,剩下的LSE就是专门给RTC提供时钟的。

好了,讲完了RTC的三个时钟来源,现在讲讲RTC的内部结构图,还是看图说话

650a17630fa346709a733dc8f6048b10.png

灰色部分是后备区域,VDD断开,VBAT会接着供电。剩下的就是正常的断电停止工作的区域了。

首先来看看图中的第①部分,RTC是挂载在APB1(Advance Peripheral Bus 1[高级外设总线1])上的,PCLK1就是外设时钟1,是36MHZ的,速度很快。

第二部分是后备区域,先了解一下这里面的寄存器,RTC_PRL(RTC_Prescaler)预分频器,RTC_DIV(RTC_Divider)分频器,DIV是一个递减的寄存器,RTCCLK给DIV提供时钟,每一个上升沿,DIV就会减一,当递减到0时,会输出一个脉冲且预分频器的值会重装载到DIV里,让他再次递减,以此循环。

举个例子,RTCCLK为32.768KHZ,我们想要让他输出1HZ,就要将PRL设置成32768-1,让DIV从32768-1开始计数,RTCCLK每来一个上升沿就减一,那么32768个脉冲DIV才会递减到0,到了这DIV才输出了一个脉冲。如果要实现2分频要怎么搞?直接设置PRL为2-1,让DIV从2-1开始递减,要让DIV输出一个脉冲只需RTCCLK给DIV两个脉冲即可,这就实现了二分频。

继续来看,分频后的时钟提供给了RTC_CNT(RTC_Count),是一个32位的可编程的计数器,没错,这就是时间戳,这里所说的32位是无符号的32位,最大是2^32-1,到了2106年才会溢出,而想要一秒计数一次只需要给他一个1HZ的时钟即可,也就是将PRL设置成32768-1。而RTC_ALR(RTC_Alarm)是用来设置闹钟的,设置一个值,当CNT的值与ARL的值相等时将会产生一个信号给中断,执行你想要做的事情。

第三部分,我们可以看到这是RTC_CR(控制寄存器),里面最后一个字母是F的就是Flag标志位,E就是用来使能,然后我们看标志位的来源

1、RTC_Second,每秒来一个信号

2、RTC_Overflow,寄存器溢出信号

3、RTC_Alarm,闹钟信号

然后这几个信号流向了第四部分的NVIC,流向NVIC的还有WKUP(Wake up),唤醒单片机让它退出待机模式且进入中断。

到了这里,算是简单了解了RTC了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值