STM32学习笔记(十二)丨RTC实时时钟

这篇具有很好参考价值的文章主要介绍了STM32学习笔记(十二)丨RTC实时时钟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

​  本次课程采用单片机型号为STM32F103C8T6。
​  课程链接:江协科技 STM32入门教程


  往期笔记链接:
  STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出
  STM32学习笔记(二)丨STM32程序调试丨OLED的使用
  STM32学习笔记(三)丨中断系统丨EXTI外部中断
  STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)
  STM32学习笔记(五)丨TIM定时器及其应用(输出比较丨PWM驱动呼吸灯、舵机、直流电机)
  STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)
  STM32学习笔记(七)丨TIM定时器及其应用(编码器接口丨用定时器实现编码器测速)
  STM32学习笔记(八)丨ADC模数转换器(ADC单、双通道转换)
  STM32学习笔记(九)丨DMA直接存储器存取(DMA数据转运、DMA+AD多通道转换)
  STM32学习笔记(十)丨I2C通信(使用I2C实现MPU6050和STM32之间通信)
  STM32学习笔记(十一)丨SPI通信(W25Q64芯片简介,使用SPI读写W25Q64存储器芯片)


一、计算机底层计时系统——时间戳

1.1 时间戳简介

STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记

  Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒。

  • 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量。

  2038年危机:由于之前的Unix系统采用一个32位的有符号数来计时,这个计时系统最大的计时时间会在2038年的1月19日溢出,这可能会让一部分不健全的计算机程序崩溃。STM32的32位秒计数器是一个无符号的计数器,在2106年才会溢出。

  • 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间。

  可以看到,用时间戳来计时的方法是很简单粗暴的一种计时方法,但是计算机底层通过时间戳来计时,有以下几点好处:

  1. 硬件电路设计简单:设计RTC时,只需要一个很大的秒计数器即可,不需要年月日、大月小月、平年闰年等寄存器来记录。
  2. 计算时间间隔时很方便。
  3. 存储方便,只需要一个变量。

  当然,使用时间戳计数器来计时也有一定的缺陷,例如在将秒数转化为我们熟知的时间格式的时候,需要进行复杂的计算,比较占用软件资源。

1.2 GMT/UTC

  • GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准。但是由于地球自转一周的时间实际上是不固定的,它是越来越慢的,所以这种计时系统已经不再适用于现代科学和社会的发展

  • UTC(Universal Time Coordinated)协调世界时是一种以原子钟为基础的时间计量系统。它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致。Unix时间戳不考虑闰秒,所以每产生一个闰秒,国家授时中心的标准时间和时间戳的标准时间就会产生一秒的偏差。

1.3 C语言和time.h库

STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记
​  在一系列函数中,最复杂的函数是struct tm* localtime(const time*);time_t mktime(struct tm*);,这两个函数也是STM32的RTC编程中需要掌握的函数,所以需要重点掌握,其他的了解即可。
​  struct tm* localtime(const time_t*)函数的参数是一个静态的指针变量,如果不特殊指定为32位计时系统,就默认为64位的计时系统,所以可以认为time_t就是一个64位的int类型的变量。这个函数的返回值是一个结构体指针,在这个结构体中存放一些时间信息,可以供用户方便的查看。time_t mktime(struct tm*)函数也是同理。
STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记

二、STM32的BKP和RTC时钟

2.1 BKP(Backup Registers)备份寄存器

​  BKP可用于存储用户应用程序数据。当VDD(2.0 ~ 3.6V)电源被切断,他们仍然由VBAT(1.8 ~ 3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位

  • TAMPER引脚产生的侵入事件将所有备份寄存器内容清除
  • RTC引脚输出RTC校准时钟(外部设备测量这个输出时钟,可以对内部RTC微小的误差进行校准)、RTC闹钟脉冲或者秒脉冲(可以输出,为别的设备提供时钟)
  • RTC时钟校准寄存器,用于存储校准配置
  • 用户数据存储容量:20字节(中容量和小容量)/ 84字节(大容量和互联型)

​  下图展示了BKP的基本结构,橙色部分为后备区域。BKP是后备区域中的一部分电路,后备区域中还有RTC的相关电路。STM32F103C8T6的VBAT,TAMPER,RTC三个功能复用在了同一个引脚上,所以这三个功能在同一时间只能使用一个
STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记

2.2 RTC(Real Time Clock)实时时钟

2.2.1 RTC简介

  • RTC是一个独立的定时器,可为系统提供时钟和日历的功能
  • RTC和时钟配置系统处于后备区域,系统复位时数据不清零,VDD(2.0 ~ 3.6V)断电后可借助VBAT(1.8 ~ 3.6V)供电继续走时
  • 32位的可编程计数器,可对应Unix时间戳的秒计数器
  • 20位的可编程预分频器(分频系数可以为1到 2 20 2^{20} 220),可适配不同频率的输入时钟
  • 可选择三种RTC时钟源:
    • HSE(高速外部时钟)时钟除以128(通常为8MHz/128)
    • LSE(低速外部时钟)振荡器时钟(通常为32.768KHz),只有这一路的时钟可以由VBAT供电,所以如果要实现掉电自动走时的功能,必须使用这一路时钟
    • LSI(低速内部时钟)振荡器时钟(40KHz)

时钟信号选择32.768kHz的原因

  1. 32.768kHz对于晶振或振荡器的,在硬件设计或者工业生产时可能会有一些便利,使这一频率的晶振或振荡器稳定性高,益于生产;
  2. 32768恰好为2的15次方,如果要产生一个1Hz的信号供RTC计时,可以简单地设计一个15位的计数器,让其不断计时,它的自然溢出频率就是1Hz,不用额外设计计数器的目标值存储寄存器,也不用把计数值和目标值不断作比较,对于芯片内部的电路设计非常友好。

2.2.2 RTC的内部结构及工作原理

STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记
​  上图展示了RTC的内部框图和工作原理。灰色的部分为后备区域,在主电源断电时可以由VBAT供电继续工作。RTC_DIV余数寄存器是一个自减计数器。自建到0后,在下一个上升沿到来时产生溢出信号,并江RTC_PRL中的值装载进来继续自减。
​  RTC电路可以产生三个中断信号:

  • RTC_Second秒中断:每秒产生一个中断信号。
  • RTC_Overflow溢出中断:这个中断会在2106年触发一次。
  • RTC_Alarm闹钟中断:该中断可以让STM32从待机模式中唤醒,并且执行一个中断服务函数。这可以实现让STM32在一些环境恶劣的地方工作,在节约电量的前提下自动执行定时采集数据的功能。
    STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记
    ​  实际设计的硬件电路及推荐电路如下图所示:
    STM32学习笔记(十二)丨RTC实时时钟,STM32 学习笔记,stm32,学习,笔记

2.2.3 RTC操作及注意事项

  • 依次执行以下操作将使能对BKP和RTC的访问
    • 设置RCC_APB1ENR的PWREN和BKPEN,使能PWR和BKP时钟(需要同时开启PWR和BKP的时钟,RTC才能正常使用,RTC并没有单独开启时钟的函数)
    • 设置PWR_CR的DBP,使能对BKP和RTC的访问
  • 若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1(RTC等待同步):由于PCLK1的时钟频率36MHz远大于RTCCLK,有可能在上电开启时,RTC的寄存器还没有更新到APB1总线上,这时将发生读取错误(读取到的值为0)。实际使用时调用一个RTC等待同步的库函数即可。
  • 必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器(库函数中已经包含)
  • 对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器(调用一个等待的库 函数即可)

​  课程链接:江协科技 STM32入门教程,欢迎大家一起交流学习。
​  持续更新完善中……


  原创笔记,码字不易,欢迎点赞,收藏~ 如有谬误敬请在评论区不吝告知,感激不尽!博主将持续更新有关嵌入式开发、机器学习方面的学习笔记~文章来源地址https://www.toymoban.com/news/detail-596846.html

到了这里,关于STM32学习笔记(十二)丨RTC实时时钟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32-RTC实时时钟

    目录 RTC实时时钟 功能框图 UNIX时间戳 初始化结构体 RTC时间结构体 RTC日期结构体 RTC闹钟结构体 进入和退出配置函数 实验环节1:显示日历 常规配置 RTC配置 测试环节 实验现象 实验环节2:闹钟 常规配置 RTC配置 测试环节 实验现象 STM32的RTC外设,实质上是一个 掉电后还继续运

    2024年02月06日
    浏览(41)
  • STM32-RTC实时时钟详解

    RTC的本质很简单,就是一个时钟经过精确分频最后得到的一个1Hz的时钟,也可以说是计数器,其他大部分功能都是基于这个计数器设计的数字逻辑。 本文讲的RTC是基于STM32F030来讲的,相比与F1系列的RTC来说,M0的将很多原本需要软件实现的功能硬件化了,使用起来更加便利。

    2024年02月04日
    浏览(39)
  • STM32-实时时钟RTC-2

                                     

    2024年01月20日
    浏览(38)
  • STM32基础10--实时时钟(RTC)

     目录 前言 RTC框图 STM32实时时钟电路 功能需要 STM32CubeMx配置RTC 配置RCC 配置RTC 配置时间,闹钟,唤醒 开启中断 设置中断优先级 功能代码实现 STM32Cude生成RTC初始化 自定义触发闹钟次数变量  重写周期唤醒回调函数 重写闹钟中断函数         在做51单片机项目时,如果需

    2023年04月11日
    浏览(29)
  • STM32中的RTC实时时钟和配套闹钟设置

    主要初始化函数,以及设置闹钟函数,闹钟中断函数 RTC.c RTC.h main.c

    2024年04月23日
    浏览(36)
  • stm32-OLED屏+RTC实现简易实时时钟(上篇)

    oled屏选择ssd1306,使用RTC实现简易实时时钟 1、MCU接口选择 SSD1306单片机接口由8个数据引脚和5个控制引脚组成。通过BS[2:0]引脚上的硬件选择可以设置不同的MCU模式    通过控制BS[2:0]引脚可以设置MCU与OLED屏的通信方式。因为我使用的是正点原子的开发板,所以我用了适配的接

    2024年01月17日
    浏览(39)
  • stm32-OLED屏+RTC实现简易实时时钟(下篇)

    一、RTC简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可 提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒 后,R

    2024年01月18日
    浏览(39)
  • STM32实时时钟(RTC)的配置和使用方法详解

    实时时钟(RTC)是STM32系列微控制器上的一个重要模块,用于提供准确的时间和日期信息。在本文中,我们将详细介绍STM32实时时钟的配置和使用方法。 ✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进 ❤欢迎关注我的知乎:对error视而不见 代码获取、问题探讨及

    2024年02月21日
    浏览(47)
  • 【STM32】读写BKP备份寄存器&RTC实时时钟

    目录 BKP BKP简介 BKP基本结构 BKP测试代码 RTC RTC简介 RTC框图 RTC基本结构 硬件电路 RTC操作注意事项 接线图 初始化 使用BKP解决只初始化一次时间  初始化参考代码 RTC设置时间 RTC读取时间 完整代码 MyRTC.c MyRTC.h main.c BKP(Backup Registers)备份寄存器 BKP可用于存储用户应用程序数据

    2024年04月22日
    浏览(42)
  • STM32CubeIDE开发(十一), STM32实时时钟(RTC)写入及读取日历时间开发要点

    目录 一、RTC简介 二、工程创建及配置  三、驱动代码设计实现 四、编译及测试         实时时钟的缩写是RTC(Real_Time Clock),核心是晶振,晶振频率一般为32768 Hz 。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期

    2024年01月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包