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

STM32之RTC

RTC简介

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

普通定时器拿来作时钟可行吗?普通定时器无法掉电运行!

RTC特性:

1,能提供时间(秒钟数) 2,能在MCU掉电后运行 3,低功耗

常用的RTC方案

对比因素

内部RTC

外置RTC

信息差异

提供秒/亚秒信号

提供秒信号和日历

功耗

功耗高

功耗低

体积

不用占用额外体积

体积大

成本

成本低

成本高

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

BCD码

时间戳

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

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

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

UTC/GMT

GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准

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

时间戳转换

C语言的time.h模块提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换

函数

作用

time_t time(time_t*);

获取系统时钟

struct tm* gmtime(const time_t*);

秒计数器转换为日期时间(格林尼治时间

struct tm* localtime(const time_t*);

秒计数器转换为日期时间(当地时间)

time_t mktime(struct tm*);

日期时间转换为秒计数器(当地时间

char* ctime(const time_t*);

秒计数器转换为字符串(默认格式)

char* asctime(const struct tm*);

日期时间转换为字符串(默认格式)

size_t strftime(char*, size_t, const char*, const struct tm*);

日期时间转换为字符串(自定义格式)

STM32 F1 RTC框图介绍

1,RTC预分频器

2,32位可编程计数器

3,待机唤醒

4,RTC控制寄存器与APB1接口

3个时钟源(HSE / 128)            (LSI 40kHz)         (LSE 32.768kHz)

RTC工作在后备区域,VDD掉电仍正常

F1 RTC相关寄存器介绍

后备寄存器和RTC寄存器特性(F1)

部分寄存器写保护:RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器不会被系统复位 

数据存储功能:RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位。 后备寄存器可用于保存掉电时的数据。

独立工作:RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电。在VBAT供电时仍可继续工作。

2个独立复位:APB1接口由系统复位;RTC核心只能由后备域复位;

RCC_APB1ENR寄存器

使能PWR && BKP时钟

PWR_CR寄存器

使能后备域和RTC的访问权限

RCC_BDCR寄存器

通过RCC_BDCR配置: 1,开启RTC时钟 2,开启LSE时钟; 3,选择RTC计数时钟源;

选择LSE的原因,见F1参考手册V10 59页关于RTC时钟的描述

RTC_CRL寄存器

RTC进入配置模式,关注的位

RTC_CRH寄存器

复位值为0,置1可开启相关中断

RTC_PRLH寄存器

使计数器每计数一次就是1秒,即需要32768分频。

RTC_PRLL寄存器

与RTC_PRL相似的寄存器RTC_DIV可以在不停止分频计数器的工作,获得预分频计数器的当前值。

RTC_CNTH寄存器

注意:进入配置模式才能对寄存器进行操作

RTC_CNTL寄存器

与RTC_CNT相似的寄存器还有RTC_ALR,这里就不做介绍。

RTC相关的HAL库驱动介绍(F1)

驱动函数

关联寄存器

功能描述

HAL_RTC_Init(...)

CRL/CRH/PRLH/PRLL

初始化RTC

HAL_RTC_MspInit(…)

初始化回调

使能RTC时钟

HAL_RCC_OscConfig(…)

RCC_CR/PWR_CR

开启LSE时钟源

HAL_RCCEx_PeriphCLKConfig(...)

RCC_BDCR

设置RTC时钟源为LSE

HAL_PWR_EnableBkUpAccess(...)

PWR_CR

使能备份域的访问权限

HAL_RTCEx_BKUPWrite/Read()

BKP_DRx

/写备份域数据寄存器

以下是需要开启的时钟源: __HAL_RCC_RTC_ENABLE()

__HAL_RCC_PWR_CLK_ENABLE()

__HAL_RCC_BKP_CLK_ENABLE()

RTC基本驱动步骤(F1)

时间设置和读取

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

驱动函数

功能描述

rtc_get_time(…)

总秒数转成日历时间

rtc_is_leap_year(…)

判断是否闰年

uint8_t rtc_get_week(…)

计算公历日历对应的星期几

static long rtc_date2sec(…)

日历时间转成对应总秒数

全局的结构体变量calendar存储时间信息


文章转载自:

http://nWnkgVVO.ywtbk.cn
http://3ap4UsH6.ywtbk.cn
http://Oiu66QAr.ywtbk.cn
http://dtIjyga4.ywtbk.cn
http://oju5QPZm.ywtbk.cn
http://b1N7MwRr.ywtbk.cn
http://cV1HCsAN.ywtbk.cn
http://bx9Vajc1.ywtbk.cn
http://cp1XuH7t.ywtbk.cn
http://nDypjJ12.ywtbk.cn
http://XQY2Py3T.ywtbk.cn
http://3vweUdSS.ywtbk.cn
http://TcSXBQwz.ywtbk.cn
http://w8GJxM03.ywtbk.cn
http://bNHeezzm.ywtbk.cn
http://CZ8S0peH.ywtbk.cn
http://c52bTbl6.ywtbk.cn
http://cqN4JuCv.ywtbk.cn
http://cRWsGMEk.ywtbk.cn
http://JZcgSk2s.ywtbk.cn
http://FqXlng3Q.ywtbk.cn
http://uP6Aa2L1.ywtbk.cn
http://f2QzRn7m.ywtbk.cn
http://0niUjfyM.ywtbk.cn
http://myltZaxH.ywtbk.cn
http://hmI0MqsA.ywtbk.cn
http://ZEDoJXxZ.ywtbk.cn
http://GkbFu5o5.ywtbk.cn
http://X1y2cudK.ywtbk.cn
http://0Vozg02d.ywtbk.cn
http://www.dtcms.com/a/380891.html

相关文章:

  • 正式工作一年半了 小记一下
  • HDFS与Yarn深入剖析
  • 空间信息与数字技术和传统GIS专业有何不同?
  • 企业内训|智能驾驶案例及实践——某央企汽车集团
  • 告别繁琐配置!Retrofit-Spring-Boot-Starter让HTTP调用更优雅
  • 星座SAR动目标检测(GMTI)
  • Python异常处理自定义:从基础到高级的完整指南
  • R语言水文、水环境模型优化:从最速上升法、岭分析到贝叶斯优化与异方差处理,涵盖采样设计、代理模型与快速率定等
  • PHP启动报错:liboing.so.5:cannot op如何处理?
  • 双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用
  • 半导体常见分析设备之EDX分析
  • 金蝶云星空 × 飞书审批全场景对接案例分享
  • 网易伏羲亮相Arm Unlocked 2025,携手Arm探索中国人工智能创新之路
  • [code-review] docs | GitHub Actions运行器 | workflows/cr.yml
  • 推箱子(Num014)
  • GitHub热榜项目 - 日榜之应用场景与未来发展趋势
  • Redis哈希(Hash):适合存储对象的数据结构,优势与坑点解析
  • docker一次性清理掉所有容器和镜像
  • 13、贝叶斯思维与条件概率 - 从不确定性推理到智能决策
  • 系统编程.10 同步和互斥
  • Teable vs NocoDB 开源、在线协同 多维表格大PK
  • LINUX--编译器gcc/g++
  • 跨屏互联KuapingCMS建站系统发布更新 增加数据看板
  • 保证消息的可靠性
  • 从零开始搭建一个新的项目,需要配置哪些东西
  • 实施Ansible Playbook
  • 【每日算法】移除元素 LeetCode
  • 接口测试概念
  • 解析4口POE工控机的场景价值与核心优势
  • 【C++】STL 简介