STM32 RTC实时时钟 F407 寄存器
RTC介绍
STM32F1:
RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。
即在F1系列,RTC的日历部分只有一个32位的寄存器
该寄存器直接存放 时间戳 的值,即:秒数值
想要获取其他时间,想要软件来实现。
STM32F4:
RTC日历部分包含两个32位的寄存器,分为日期寄存器和时间寄存器
可直接输出时分秒,星期、月、日、年
让我们在软件编程时大大降低了难度。
以下是基于F4的RTC内容。
RTC说明
年月日时分秒,自动计算闰年,能区分每个月的天数
理解要点:
Unix时间戳 从1970年开始每1s计1个数
BKP备份域 相当于存储器有20个u32的寄存器,断电复位
BCD码 二进制十进数
BCD:
4位二进制表示1位十进制中的0~9
十进制 BCD码
19 ---------- 0x19
备份域:
RTC有20个u32的备份域寄存器RTC_BKPxR 即有80个字节空间
备份域的作用:防止程序重新设置RTC日历时间
RTC运行:
RTC控制器及其备份域,只要有供电就可以一直运行
供电是指有电源,而CPU复位不算掉电源
当有主供电电路,RTC电源由主电路提供,节省备用电源(纽扣电池)
当主供电电路断电,RTC在有备用电源的情况下,能够继续运行。
RTC框图
RTC时钟源
RTC有3个时钟源选择 HSE LSE LSI
主要选择LSE低速外部时钟
HSE:为总线提供时钟,而且频率太高
LSI:时钟频率不稳定
LSE:外接32.768KHz,专门设计为RTC提供时钟
RTC内部有两个分频器:
一个异步分频器 默认128分频
一个同步分频器 默认256分频
刚好将LSE的32.768KHz 分频 为 1Hz
即 1s 计 1个数
RTC实时时钟
1.使能RTC控制器:
- 将电源控制寄存器(PWR->CR)的DBP位写1
//解除RTC控制器和备份寄存器的保护
//配置这个寄存器之前,要使能电源控制器时钟 RCC->APB1 28位
- 时钟源配置选择LSE低速外部时钟
2.RTC时钟源选择:
RCC 备份域控制寄存器RCC->BDCR
使能LSE时钟,并等待时钟就绪
RTCSEL[1:0]直接赋值选择LSE
不能先清零再配置此位,最后使能RTC时钟
3.解除RTC寄存器写保护:
- 往RTC_WPR寄存器 中写 0xca 再写 0x53
//取消RTC所有寄存器的写保护
//往RTC_WPR寄存器中随便写一个数据就会再次激活写保护 0xff
4.配置RTC:
要想改变日历寄存器的时间的值或者分频值
需要让日历进入初始化模式(日历停止工作)
更改完以后,要想日历继续工作,需要退出初始化模式(自由模式)
5.进入初始化模式:
RTC->ISR 寄存器的INIT位写1
等待是否允许更新(改变)日历值位 INITF
设置日期和时间寄存器 TD&DR
退出初始化模式 RTC->ISR 寄存器的INIT位写0
读取日历:
获取 DR和TR的值
需要用 两次 同步影子寄存器 来读取
因为通过实验测试,一次读两个数据寄存器 数值有误
同步步骤:先将同步标志位清零,确保为最新鲜的数据
等待同步标志置1,读取数据寄存器
十进制转BCD码 return ((dec / 10) << 4) | (dec % 10);
BCD码转十进制 return (bcd >> 4) * 10 + (bcd & 0x0f);
RTC闹钟
因此需要配置EXTI控制器的17号中断线
使能SYSCFG时钟
打开EXTI 17号线中断请求使能
EXTI 17 选择上升沿检测
同样,配置NVIC控制器管理
中断源:RTC_Alarm_IRQn
中断服务函数:RTC_Alarm_IRQHandler
清除中断标志位是 EXTI->PR & (1<<17)
同时也要清除RTC->ISR & (1<<8)闹钟匹配位
因为EXTI就是监控 该闹钟匹配位 的 边沿跳变
RTC实时时钟初始化代码
/***************************************
*函数名 :rtc_init
*函数功能 :RTC初始化配置函数
*函数参数 :RTC_t time
*函数返回值 :无
*函数描述 :
****************************************/
void rtc_init(RTC_t time)
{
/*解除RTC控制器和相关寄存器保护*/
//电源控制器时钟使能
RCC->APB1ENR |= (1<<28);
//PWR->CR 的DBP位写1解除RTC控制器控制
PWR->CR |= (1<<8);
/*RTC时钟源设置*/
//开启LSE时钟
RCC->BDCR |= (1<<0);
//等待LSE时钟就绪
while(!(RCC->BDCR & (1<<1)));
//选择LSE作为RTC时钟源
RCC->BDCR |= (1<<8);
//使能RTC时钟
RCC->BDCR |= (1<<15);
//解除RTC寄存器写保护
RTC->WPR = 0xca;
RTC->WPR = 0x53;
/*RTC相关寄存器配置*/
//选择24小时/天格式
RTC->CR &= ~(1<<6);
//日历值取自影子寄存器
RTC->CR &= ~(1<<5);
//激活RTC寄存器写保护
RTC->WPR = 0xff;
/*设置初始时间*/
if(RTC->BKP0R != 0xff)
{
rtc_set_time(time);
RTC->BKP0R = 0xff;
}
}
RTC闹钟初始化函数 及 中断服务函数
/***************************************
*函数名 :clockA_init
*函数功能 :闹钟A初始化函数
*函数参数 :RTC_t time
*函数返回值 :无
*函数描述 :
****************************************/
void clock_init(RTC_t time)
{
u32 a_temp;
//解除RTC寄存器写保护
RTC->WPR = 0xca;
RTC->WPR = 0x53;
//禁止闹钟
RTC->CR &= ~(3<<8);
//闹钟A中断使能
RTC->CR |= (1<<12);
//等待允许更新闹钟
while(!(RTC->ISR & (1<<0)) && !(RTC->ISR & (1<<1)));
//获取日期BCD码
a_temp = (in_dec_out_bcd(time.day)<<24) |
(in_dec_out_bcd(time.hour)<<16) |
(in_dec_out_bcd(time.min)<<8) |
(in_dec_out_bcd(time.sec));
//设置闹钟A寄存器
RTC->ALRMAR = a_temp;
/*EXTI控制器配置*/
//打开SYSCFG时钟
RCC->APB2ENR |= 1<<14;
//打开中断请求使能
EXTI->IMR |= (1<<17);
//上升沿检测
EXTI->RTSR |= (1<<17);
/*NVIC*控制器配置*/
//优先级分组 ----在主函数
//计算优先级编码值
u32 pri= NVIC_EncodePriority (5,2,2);
//设置具体中断源
NVIC_SetPriority(RTC_Alarm_IRQn, pri);
//使能NVIC响应通道
NVIC_EnableIRQ(RTC_Alarm_IRQn);
//使能闹钟A
RTC->CR |= (1<<8);
//激活RTC寄存器写保护
RTC->WPR = 0xff;
}
/**********************************************
*函数名 :RTC_Alarm_IRQHandler
*函数功能 :RTC闹钟中断服务函数
*函数参数 :无
*函数返回值 :无
*函数描述 :
***********************************************/
void RTC_Alarm_IRQHandler(void)
{
///判断是闹钟A信号
if(EXTI->PR & (1<<17))
{
//清除标志位
EXTI->PR |= (1<<17);
RTC->ISR &= ~(1<<8);
//执行紧急事件
LED1_ON;
printf("延时后\r\n");
LED2_ON;
LED1_OFF;
}
}
相关文章:

STM32 RTC实时时钟 F407 寄存器
RTC介绍 STM32F1: RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。 即在F1系列,RTC的日历部分只有一个32位的寄存器 该寄存器直接存放 时间戳 的值,即࿱…...

矩阵等价、向量组等价、线性方程组同解与公共解的关系
矩阵等价 矩阵 A 、 B 等价 ⇔ 两矩阵秩相等 R ( A ) R ( B ) ⇔ 每个矩阵的行秩等于列秩,两个矩阵的行秩与列秩分别相等 ⇔ 若行满秩则列向量组等价 ⇔ 若列满秩则行向量组等价 \begin{align} 矩阵A、B等价\\ &\Leftrightarrow 两矩阵秩相等R(A)R(B)\\ &\…...

[Linux] Linux 进程程序替换
标题:[Linux] Linux 进程程序替换 个人主页水墨不写bug (图片来源于网络) 目录 O、前言 一、进程程序替换的直观现象(什么是进程程序替换?) 二、进程程序替换的原理 三、进程程序替换的函数(…...

【Linux系统编程】第三十一弹---深入理解静态库:从零开始制作与高效使用的完全指南
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、静态库 1.1、怎么做静态库 1.2、怎么使用静态库 1、静态库 1.1、怎么做静态库 在Linux环境下,通常使用GCC&am…...

FFmpeg 简介及其下载安装步骤
目录 一、FFmpeg 简介 二、FFmpeg 安装步骤 2.1 打开官网 2.2 选择FFmpeg系统版本 2.3 下载FFmpeg压缩包 2.4 将下载好的压缩包进行解压 2.5 设置环境变量 2.5.1 在搜索栏中搜索【环境变量】,然后单击将其打开 2.5.2 找到系统变量中的【Path】,点…...

使用CSS+SVG实现加载动画
使用CSSSVG实现加载动画 效果展示 CSS知识点 SVG元素使用SVG相关CSS属性运用 整体页面布局 <section><div class"box"><div class"loader"><svg><circle cx"40" cy"40" r"40"></circl…...

物联网(IoT)的未来发展:智能互联时代的到来
物联网(IoT)的未来发展:智能互联时代的到来 物联网(IoT)正在迅速改变我们与世界互动的方式。无论是智能家居、智慧城市,还是工业自动化,物联网技术通过设备互联、数据采集和智能控制࿰…...

斯坦福 CS229 I 机器学习 I 构建大型语言模型 (LLMs)
1. Pretraining -> GPT3 1.1. Task & loss 1.1.1. 训练 LLMs 时的关键点 对于 LLMs 的训练来说,Architecture(架构)、Training algorithm/loss(训练算法/损失函数)、Data(数据)、Evalu…...

Java->排序
目录 一、排序 1.概念 2.常见的排序算法 二、常见排序算法的实现 1.插入排序 1.1直接插入排序 1.2希尔排序(缩小增量法) 1.3直接插入排序和希尔排序的耗时比较 2.选择排序 2.1直接选择排序 2.2堆排序 2.3直接选择排序与堆排序的耗时比较 3.交换排序 3.1冒泡排序…...

linux 大小写转换
var"TM_card_INFo" # 把变量中的第一个字符换成大写 echo ${var^} # 把变量中的所有小写字母,全部替换为大写 echo ${var^^} # 把变量中的第一个字符换成小写 echo ${var,} # 把变量中的所有大写字母,全部替换为小写 echo ${var,,} 参考…...

Linux——传输层协议
目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…...

centos系列,yum部署jenkins2.479.1,2024年长期支持版本
centos系列,yum部署jenkins2.479.1,2024年长期支持版本 0、介绍 注意:jenkins建议安装LTS长期支持版本,而不是安装每周更新版本,jenkins安装指定版本 openjdk官网下载 Index of /jenkins/redhat-stable/ | 清华大学开…...

正则表达式-“三剑客”(grep、sed、awk)
1.3正则表达式 正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符号某个条件的子串等,在linux中代表自定义的模式模版,linux工具可以用正则表达式过滤文本。Linux…...

数智时代的新航向:The Open Group 2024生态系统架构·可持续发展年度大会邀您共筑AI数字新时代
在全球可持续发展和数字化转型双重驱动下,企业正面临着前所未有的挑战与机遇。如何在激烈的市场竞争中,实现业务增长的同时,履行社会责任,达成可持续发展的目标?The Open Group 2024生态系统架构可持续发展年度大会将于…...

TensorFlow 的核心概念
TensorFlow 是一个开源的机器学习框架,由 Google 开发和维护。它提供了一个强大的工具集,用于构建和训练各种机器学习模型。 TensorFlow 的核心概念是计算图(Computational Graph)。计算图由节点(Nodes)和…...

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(动态新增、修改等操作)
SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(动态新增、修改等操作) 前言数据库脚本创建需要被调度的方法创建相关实体类创建业务层接口创建业务层实现类控制层类测试结果 前言 我这边的SpringBoot的版本为2…...

Matlab详细学习教程 MATLAB使用教程与知识点总结
Matlab语言教程 章节目录 一、Matlab简介与基础操作 二、变量与数据类型 三、矩阵与数组操作 四、基本数学运算与函数 五、图形绘制与数据可视化 六、控制流与逻辑运算 七、脚本与函数编写 八、数据导入与导出 九、Matlab应用实例分析 一、Matlab简介与基础操作 重点内容知识…...

【ELKB】Kibana使用
搭建好ELKB后访问地址:http://localhost:5601 输入账号密码登录以后 左侧导航有home、Analysis、Enterprise search 、Observability、Security、Management home:首页Analysis:工具来分析及可视化数据Enterprise search:企业级搜…...

ChatGPT免费使用:人工智能在现代社会中的作用
随着人工智能技术的不断发展,越来越多的应用程序和工具开始使用GPT作为其语言模型。但是,这些应用程序和工具是否收费?如果是免费的,那么他们是如何盈利的?在本文中,我们将探讨ChatGPT免费使用的背后原理&a…...

腾讯音乐:从 Elasticsearch 到 Apache Doris 内容库升级,统一搜索分析引擎,成本直降 80%
导读: 为满足更严苛数据分析的需求,腾讯音乐借助 Apache Doris 替代了 Elasticsearch 集群,统一了内容库数据平台的内容搜索和分析引擎。并基于 Doris 倒排索引和全文检索的能力,支持了复杂的自定义标签计算,实现秒级查…...

CubeMX的FreeRTOS学习
一、FreeRTOS的介绍 什么是FreeRTOS? Free即免费的,RTOS的全称是Real Time Operating system,中文就是实时操作系统。 注意:RTOS不是指某一个确定的系统,而是指一类的操作系统。比如:us/OS,FreeRTOS&…...

C语言初始:数据类型和变量
、 一.数据类型介绍 人有黄人白人黑人,那么数据呢? 我们大家可以看出谁是黄种人,谁是白种人,谁是黑种人,这是因为他们是类似的。 数据也是有类型的,就譬如整数类型,字符类型,浮点…...

Linux shellcheck工具
安装工具 通过linux yum源下载,可能因为yum源的问题找不到软件包,或者下载的软件包版本太旧。 ShellCheck的源代码托管在GitHub上(推荐下载方式): GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts 对下…...

FLINK SQL时间属性
Flink三种时间属性简介 在Flink SQL中,时间属性是一个核心概念,它主要用于处理与时间相关的数据流。Flink支持三种时间属性:事件时间(event time)、处理时间(processing time)和摄入时间&#…...

android——Groovy gralde 脚本迁移到DSL
1、implementation的转换 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:*** 转换为 implementation ("com.github.CymChad:BaseRecyclerViewAdapterHelper:***") 2、plugin的转换 apply plugin: kotlin-android-extensions 转换为&#x…...

工程项目管理中的最常见概念!蓝燕云总结!
01 怎么理解工程项目管理? 建设工程项目管理指的是专业性的管理,并非行政事务管理。建设工程项目管理是对工程项目全生命周期的管理,确保项目能够按计划的进度、成本和质量完成。 建设工程项目不同阶段管理的主要内容不同,通常…...

PostgreSQL AUTO INCREMENT
PostgreSQL AUTO INCREMENT 在数据库管理系统中,自动递增(AUTO INCREMENT)是一种常见特性,用于在插入新记录时自动生成唯一的标识符。PostgreSQL,作为一个功能强大的开源关系数据库管理系统,也提供了类似的…...

24-10-13-读书笔记(二十五)-《一只特立独行的猪》([中] 王小波)用一生来学习艺术
文章目录 《一只特立独行的猪》([中] 王小波)目录阅读笔记记录总结 《一只特立独行的猪》([中] 王小波) 十月第五篇,放慢脚步,秋季快要过去了,要步入冬季了,心中也是有些跌宕起伏&am…...

Java—继承性与多态性
目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…...

打通华为认证实验考试“痛点”:备考指南全解析
华为认证体系中的实验考试环节,尤其是针对高端的HCIE认证,是评估考生实践技能的关键部分。这一环节的核心目标是检验考生对华为设备和解决方案的操作熟练度、技术实施技能以及面对现实工作挑战时的问题解决能力。通过在真实环境中进行的实践操作…...