Stm32之RTC时钟(2021-07-26)

Stm32之RTC时钟

1.时钟框图:

  • 先将之前没做笔记的时候的时间框架图补上:

    同样源自正点原子的PPT,图中红框的部分为RTC的时钟源,有三种:

    • HSE的128分频;

    • LSI(大概40kHz)

    • LSE(原子精英板上外接32.768kHz)

    Stm32之RTC时钟(2021-07-26)

2.寄存器介绍

1)RTC内部寄存器:

  • RTC_CRH(Control Register High):只有低三位有效[2:0],分别是[2]OWIE*(溢出中断使能位)*;[1]ALRIE (闹钟中断使能位);[0]SECIE (秒中断使能位)【均是1开启使能】

  • RTC_CRL(Control Register Low):低六位有效:(以下按顺序位6到位0)

    • RTOFF (RTC operation OFF): 指示对其寄存器进行的最后一次操作的状态(1上次操作已完成,0上次操作未完成),只能读;常在程序中,等待其为1时来检测操作是否完成。
    • CNF (Configuration flag):由软件置1和清0;只有其置1后才可以操作(写)CNT,ALR, PRL.
    • RSF (Registers synchronized flag):寄存器同步标志位,其置1后即表示CNT,ALR,PRL的值已被同步到APB1接口上;只有等待其置1后才可以读CNT,ALR,PRL的值
    • OWF (溢出中断标志位),ALRF (闹钟中断标志位),SECF (秒中断标志位)
  • RTC_PRLL和RTC_PRLH:装载PRL*(Prescaler ReLoad Low/High )*的值,共19位

  • RTC_DIVH 和RTC_DIVL (RTC clock Divider )装载着余数的值,只能读,可以获得精确的时间测量,因为其时钟周期为RTC_CLK(即为分频前,时钟周期更短)。共19位,递减溢出后重装载为PRL的值。

  • RTC_CNTH和RTC_CNTL (32位的计数器) 用来存放递增的计数器;

  • RTC_ALRH和RTC_ALRL (32位闹钟值设置寄存器) ,用于设置闹钟值,即于CNT比较的值,注意其受RTOFF位保护,当且RTOFF为1时才可操作;

2)RTC相关寄存器:

  • BKP*(BacK Prepare Rrgister)*备份寄存器,42 * 16位寄存器组成(可存84Bytes数据);断电时可由Vbat供电保证数据数据不丢失,待机唤醒,不随系统复位;

  • RCC_APB1ENR的PWREN和BKPEN相关时钟使能位,来打开电源和后备接口的时钟

    电源控制寄存器(PWR_CR)的 DBP 位来使能对后备寄存器和 RTC 的访问。

3.库函数使用:

这里原子的PPT给的非常详细了:

Stm32之RTC时钟(2021-07-26)

Stm32之RTC时钟(2021-07-26)

4.原子代码的使用

只需要将原子内的rtc.c和让rtc.h加入文件即可;

  • 在初始化前建议将RTC_Init()中的标志位即当前时间更改;如下:

    (因为代码内无法高亮,用四个!!!!标出)

  • 只需要在主函数中包含对应的头文件让rtc.h,即可使用结构体 calendar.w_year*(w_month/w_date/hour/min/sec)*查询时间;

    因为原子在秒中断函数中实时更新这个结构体。

最后,用RTC和3.5寸的lcd屏做了个能走时的时钟 (难度不大,就是在时钟的时分秒针的走动处理上会比较烦些) ,代码已经开源在gitee上,连接如下:

有兴趣的同学可以下载来看看:[码云仓库连接](ZET6小项目: 是学习stm32zet6时做的一些小项目练习。 (gitee.com))

????这是效果gif*(用的是原子的精英板和3.5寸的TFTLCD屏)*

Stm32之RTC时钟(2021-07-26)

来源:点灯的棉羊

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月22日
下一篇 2021年6月22日

相关推荐