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

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模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。 即在F1系列&#xff0c;RTC的日历部分只有一个32位的寄存器 该寄存器直接存放 时间戳 的值&#xff0c;即&#xff1…...

矩阵等价、向量组等价、线性方程组同解与公共解的关系

矩阵等价 矩阵 A 、 B 等价 ⇔ 两矩阵秩相等 R ( A ) R ( B ) ⇔ 每个矩阵的行秩等于列秩&#xff0c;两个矩阵的行秩与列秩分别相等 ⇔ 若行满秩则列向量组等价 ⇔ 若列满秩则行向量组等价 \begin{align} 矩阵A、B等价\\ &\Leftrightarrow 两矩阵秩相等R(A)R(B)\\ &\…...

[Linux] Linux 进程程序替换

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

【Linux系统编程】第三十一弹---深入理解静态库:从零开始制作与高效使用的完全指南

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、静态库 1.1、怎么做静态库 1.2、怎么使用静态库 1、静态库 1.1、怎么做静态库 在Linux环境下&#xff0c;通常使用GCC&am…...

FFmpeg 简介及其下载安装步骤

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

使用CSS+SVG实现加载动画

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

物联网(IoT)的未来发展:智能互联时代的到来

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

斯坦福 CS229 I 机器学习 I 构建大型语言模型 (LLMs)

1. Pretraining -> GPT3 1.1. Task & loss 1.1.1. 训练 LLMs 时的关键点 对于 LLMs 的训练来说&#xff0c;Architecture&#xff08;架构&#xff09;、Training algorithm/loss&#xff08;训练算法/损失函数&#xff09;、Data&#xff08;数据&#xff09;、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^} # 把变量中的所有小写字母&#xff0c;全部替换为大写 echo ${var^^} # 把变量中的第一个字符换成小写 echo ${var,} # 把变量中的所有大写字母&#xff0c;全部替换为小写 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系列&#xff0c;yum部署jenkins2.479.1&#xff0c;2024年长期支持版本 0、介绍 注意&#xff1a;jenkins建议安装LTS长期支持版本&#xff0c;而不是安装每周更新版本&#xff0c;jenkins安装指定版本 openjdk官网下载 Index of /jenkins/redhat-stable/ | 清华大学开…...

正则表达式-“三剑客”(grep、sed、awk)

1.3正则表达式 正则表达式描述了一种字符串匹配的模式&#xff0c;可以用来检查一个串是否含有某种子串&#xff0c;将匹配的子串替换或者从某个串中取出符号某个条件的子串等&#xff0c;在linux中代表自定义的模式模版&#xff0c;linux工具可以用正则表达式过滤文本。Linux…...

数智时代的新航向:The Open Group 2024生态系统架构·可持续发展年度大会邀您共筑AI数字新时代

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

TensorFlow 的核心概念

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

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(动态新增、修改等操作)

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

Matlab详细学习教程 MATLAB使用教程与知识点总结

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

【ELKB】Kibana使用

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

ChatGPT免费使用:人工智能在现代社会中的作用

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

腾讯音乐:从 Elasticsearch 到 Apache Doris 内容库升级,统一搜索分析引擎,成本直降 80%

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

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...