当前位置: 首页 > news >正文

【STM32】RTC

忠实的时间记录者——RTC,板子断电也能继续记录(当然,得有纽扣电池供电)。

大部分图片来源:正点原子HAL库课程

 专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

1    概述

2    应用

3    RTC方案

4    时钟源

5    计数器

6    后备寄存器和RTC寄存器

6.1    设置时间

7    配置步骤

8    相关HAL库相关函数

9    配置步骤

10    时间设置与读取

11    使用备份寄存器存储数据


1    概述

实时时钟(Real Time Clock,RTC),本质是一个独立的计数器,计数频率常为秒,专门用来记录时间。

  • 能提供时间(秒钟数)
  • 能在MCU掉电后运行(无需VDD供电)
  • 低功耗

2    应用

时间记录、闹钟?


3    RTC方案


共同点:

  • 一般都需要设计RTC外围电路;
  • 一般都可以给RTC设置独立的电源;
  • 多数RTC的寄存器采用BCD码存储时间信息;

4    时钟源

LSE 32.768kHz

要获得秒分频,分频系数要设置为32767;


5    计数器

RTC的计数器RTC_CNT为一个32位的递增计数器。

其有一个RTC_ALR寄存器,可以理解为闹钟寄存器,若RTC_CNT的值与RTC_ALR相等,就会产生一个闹钟中断。


6    后备寄存器和RTC寄存器

6.1    设置时间

与时间计数相关的寄存器,如RTC_CNT、RTC_ALR基本都由两个寄存器组成,需要分别对高16位和低16位进行赋值。

更重要的一点是,需要进入配置模式才能对这些寄存器进行操作。


7    配置步骤


8    相关HAL库相关函数

  • 我感觉__HAL_RCC_PWR_CLK_ENABLE()是程序自动就调用了,无需手动开启;
  • 进入配置模式和退出配置模式需要直接对寄存器进行操作(“RTC->CRL |= 1 << 4”以及“RTC->CRL &= ~(1 << 4)”),配置完毕退出需要使用while(!__HAL_RTC_ALARM_GET_FLAG(&g_rtc_handle, RTC_FLAG_RTOFF))函数等待配置完毕;

9    配置步骤

6、使能中断;

7、编写中断服务函数;


10    时间设置与读取

由于F1的RTC没有日历寄存器(F1后的有),使用时只存储总秒数,不利于直接设置和显示,所以我们还需要编写函数把时间变成我们日常的日历时间


11    使用备份寄存器存储数据

STM32有备份寄存器BKP,其与RTC一样,不会被系统重置,主电源VDD断电可由VBAT供电保持,因此可以将一些配置的东西写在这里。

例如,在配置时间后往里面写入一个标识符,且在每次配置时间前都检查这个标识符。那就不会每次上电都重置RTC的时间。例:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【STM32】STM介绍
  • SQL语法:create、insert、update、
  • open62541 使用账号密码认证示例
  • BIRCH算法原理及Python实践
  • 2024年最新Java面试宝典系列-Java基础篇-第一篇
  • matlab与VS混合编程以及错误解决
  • 【Liunx入门】Liunx换源
  • 【MATLAB学习笔记】绘图——分割绘图背景并填充不同的颜色
  • 三级_网络技术_50_综合题(报文)
  • Webpack中的自定义 loader 的简单实现
  • C#面:ASP.NET MVC 中如何用表单认证?
  • 二叉树高频题目-上-不含树型dp
  • 认知杂谈25
  • Vue3+Ts封装input组件时遇到的问题
  • C#高级进阶---关于插件开发(初版)
  • @jsonView过滤属性
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 11111111
  • docker python 配置
  • extjs4学习之配置
  • FineReport中如何实现自动滚屏效果
  • jquery cookie
  • Sass 快速入门教程
  • vue-loader 源码解析系列之 selector
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 经典排序算法及其 Java 实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 配置 PM2 实现代码自动发布
  • 使用Gradle第一次构建Java程序
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 提醒我喝水chrome插件开发指南
  • 携程小程序初体验
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 转载:[译] 内容加速黑科技趣谈
  • ionic入门之数据绑定显示-1
  • 组复制官方翻译九、Group Replication Technical Details
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # dbt source dbt source freshness命令详解
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 透过事物看本质的能力怎么培养?
  • #QT(一种朴素的计算器实现方法)
  • #前后端分离# 头条发布系统
  • ( 10 )MySQL中的外键
  • (33)STM32——485实验笔记
  • (二)c52学习之旅-简单了解单片机
  • (力扣)1314.矩阵区域和
  • (转)mysql使用Navicat 导出和导入数据库
  • .aanva
  • .apk文件,IIS不支持下载解决
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息