【STM32】RTC

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

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

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


目录

[1 概述](#1 概述)

[2 应用](#2 应用)

[3 RTC方案](#3 RTC方案)

[4 时钟源](#4 时钟源)

[5 计数器](#5 计数器)

[6 后备寄存器和RTC寄存器](#6 后备寄存器和RTC寄存器)

[6.1 设置时间](#6.1 设置时间)

[7 配置步骤](#7 配置步骤)

[8 相关HAL库相关函数](#8 相关HAL库相关函数)

[9 配置步骤](#9 配置步骤)

[10 时间设置与读取](#10 时间设置与读取)

[11 使用备份寄存器存储数据](#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的时间。例:

相关推荐
czy87874755 小时前
vscode编译make命令要修改stm32cubemx生成的STM32F103XX_FLASH.ld文件
ide·vscode·stm32
三易串口屏7 小时前
实验20 自动灭火场景实验
嵌入式硬件·串口屏·三易串口屏·uart 通信
蒸蛋一级爱好者7 小时前
TFTP协议
单片机·嵌入式硬件
优信电子7 小时前
STM32/C51驱动 DHTC11 温湿度传感器
stm32·单片机·嵌入式硬件·c51·温湿度传感器·dhtc11·环境测量
周周记笔记8 小时前
【元器件专题】三极管-如果B极给一个方波信号,那么V0输出也可以设计为一个方波信号
单片机·嵌入式硬件
潜创微科技8 小时前
IT68353:DP 1.4 + HDMI 2.0 + USB-C 三合一转 HDMI 2.0 单芯片KVM切换方案
嵌入式硬件·音视频
HPT_Lt9 小时前
ZCC10012支持100V/1.2A 超低静态电流同步降压转换器 兼容LM5164
单片机·嵌入式硬件
Industio_触觉智能9 小时前
瑞芯微RK3576车载智能场景之ADAS+DMS+NVR
嵌入式硬件·dms·adas·nvr·rk3576·车载智能
2zcode9 小时前
基于STM32的多功能万年历电子闹钟设计与实现
stm32·单片机·嵌入式硬件
0南城逆流010 小时前
【STM32】RTT-Studio中HAL库开发教程十四:MSMART串口组件
stm32·单片机·嵌入式硬件