stm32f103zet6_RTC_1_介绍

RTC简介

实时时钟是一个独立的定时器

RTC模块拥有一组连续计数的计数器,在相应软件配置下,可 提供时钟日历的功能。

修改计数器的值可以重新设置系统当前的时间和日期。

RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒 后,RTC的设置和时间维持不变。

系统复位后,对后备寄存器和RTC的访问被禁止,这是为了防止对后备区域(BKP)的意外写操 作。执行以下操作将使能对后备寄存器和RTC的访问:

        ● 设置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能电源和后备接口时钟

        ● 设置寄存器PWR_CR的DBP位,使能对后备寄存器和RTC的访问。

主要特性

● 可编程的预分频系数:分频系数最高为220。

● 32位的可编程计数器,可用于较长时间段的测量。

● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟 频率的四分之一以上)。

● 可以选择以下三种RTC的时钟源:

        ─ HSE时钟除以128;高速外部时钟 (HSE)这是以外部晶振作为时钟源,晶振频率可以在4MHz到16MHz之间选择,通常采用8MHz的晶振。

        ─ LSE振荡器时钟;(低速外部时钟 (LSE)以外部晶振作为时钟源,主要提供给实时时钟模块,通常采用32.768KHz的晶振)

        ─ LSI振荡器时钟;低速内部时钟 (LSI)由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。

● 2个独立的复位类型: ─ APB1接口由系统复位;

        ─ RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位(详见6.1.3节)。

● 3个专门的可屏蔽中断:

        ─ 闹钟中断,用来产生一个软件可编程的闹钟中断。

        ─ 秒中断,用来产生一个可编程的周期性中断信号(最长可达1秒)。

         ─ 溢出中断,指示内部可编程计数器溢出并回转为0的状态。

结构图

简化的RTC框图

选择外部低数时钟

低速外部时钟 (LSE)

外接时钟频率为32.768  原因为2的15次方为它  将它分频15次为1秒

复位

  1. 系统复位://设置寄存器复位

    • 当STM32微控制器执行硬复位或软复位时,RTC模块也会被复位。
    • 系统复位可以由外部复位引脚、电源管理模块或软件命令触发。
    • 系统复位后,RTC会重置到其默认状态,例如日历寄存器会被重置到1970年1月1日。
  2. 看门狗复位

    • 如果配置了窗口看门狗(WWDG)或独立看门狗(IWDG),当这些看门狗计数器达到预设的值时,也会触发RTC复位。
    • 这些复位通常用于检测软件运行失控或系统故障。
  3. 掉电复位://外接电源电池断电

    • 当电源电压低于RTC模块的复位阈值时,RTC模块可能会自动复位。
    • 掉电复位通常用于防止在电源电压不足时,RTC模块的寄存器值被破坏。

 RTC的寄存器

  1. RTC_CRH(控制寄存器高)

    • 用于配置RTC的预分频器、闹钟中断、秒中断和唤醒功能的使能。
  2. RTC_CRL(控制寄存器低)

    • 用于控制RTC的启动和停止,以及读取RTC的状态。
  3. RTC_PRLH(预分频器加载寄存器高)和 RTC_PRLL(预分频器加载寄存器低)

    • 用于配置RTC的预分频器,以确定RTC时钟的频率。
  4. RTC_CNTLH(计数器寄存器高)和 RTC_CNTL(计数器寄存器低)

    • 用于存储RTC的秒计数器值。
  5. RTC_ALRH(闹钟寄存器高)和 RTC_ALRL(闹钟寄存器低)

    • 用于配置RTC的闹钟时间。
  6. RTC_DIVH(分频器寄存器高)和 RTC_DIVL(分频器寄存器低)

    • 用于配置RTC的时钟分频器。
  7. RTC_CR(日历寄存器)

    • 用于存储当前的日期和星期信息。
  8. RTC_TI(时间寄存器)

    • 用于存储当前的时间信息,包括小时、分钟和秒。
  9. RTC_BKPxR(后备寄存器)

    • 用于存储后备电池供电的RTC时钟信息。
  10. RTC_ISR(中断和状态寄存器)

    • 用于读取RTC的中断标志和状态。
  11. RTC_ICR(中断清除寄存器)

    • 用于清除RTC的中断标志。
  12. RTC_PRER(预分频器寄存器)

    • 用于配置RTC的预分频器。
  13. RTC_CNTH(计数器寄存器高)和 RTC_CNTL(计数器寄存器低)

    • 用于存储RTC的秒计数器值。
  14. RTC_ALRH(闹钟寄存器高)和 RTC_ALRL(闹钟寄存器低)

    • 用于配置RTC的闹钟时间。

 步骤

在STM32上设置RTC、读取RTC数据和写入RTC数据的基本步骤:

1.配置RTC时钟源

  • 选择时钟源:通常选择低速外部时钟(LSE)作为RTC的时钟源,因为它是一个稳定的32.768kHz时钟。
  • 使能时钟:通过编程RTC和后备域(RTC和后备寄存器时钟使能)相关的RCC(Reset and Clock Control)寄存器来使能RTC时钟。

2. 配置RTC

  • 配置RTC初始化结构体:使用RTC_InitTypeDef结构体来配置RTC的参数,如小时格式(12小时制或24小时制)、日期格式等。
  • 初始化RTC:调用HAL_RTC_Init()函数,将配置好的参数写入RTC相关的寄存器。

3. 设置时间

  • 配置时间结构体:使用RTC_TimeTypeDefRTC_DateTypeDef结构体来设置时间和日期。
  • 设置时间:调用HAL_RTC_SetTime()HAL_RTC_SetDate()函数来设置RTC的时间。

4. 读取时间

  • 读取时间:调用HAL_RTC_GetTime()HAL_RTC_GetDate()函数来从RTC模块读取当前的时间和日期。

5. 写入数据

  • 写入后备寄存器:STM32的RTC模块通常附带后备寄存器,可以在微控制器断电后保留数据。可以使用HAL_RTCEx_BKUPWrite()函数来写入数据到后备寄存器。

6. 读取数据

  • 读取后备寄存器:使用HAL_RTCEx_BKUPRead()函数来从后备寄存器读取数据。

注意

当关闭RTC(实时时钟)模块时,日历功能通常不会更新。RTC模块需要保持运行,才能持续跟踪和更新时间。如果RTC被关闭,它将停止计时,因此日历信息也不会更新。

在某些情况下,即使RTC模块被软件“关闭”(即,不再通过软件更新或读取时间),只要RTC的电源(例如后备电池或超级电容)仍然连接,RTC硬件本身可能仍然在运行。这取决于具体的微控制器和其RTC模块的设计。但是,如果软件不再与RTC交互,那么即使RTC硬件在运行,系统也不会知道当前的时间或日期。

如果你想要在关闭RTC模块后保留日历信息,你需要在关闭之前将当前的时间信息存储到非易失性存储器中(如后备存储器或Flash),然后在重新启动或打开RTC时从这些存储器中恢复时间信息。这样,即使RTC在一段时间内没有运行,系统也可以恢复到最后存储的时间点,并继续从那里更新日历信息。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/8769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】常用基本指令

目录 食用说明 用户管理 whoami/who clear tree 目录结构和路径 pwd ls 文件 隐藏文件 常用选项 cd 家目录、根目录、绝对路径和相对路径 touch 常用选项 mkdir rmdir/rm man cp mv cat nano echo 输出重定向 > 输入重定向 < more/less head/…

C语言每日一练(12、水仙花数)

在编程的领域中&#xff0c;我们常常会遇到一些有趣而富有挑战性的问题。今天&#xff0c;让我们一起来探讨一个经典的编程题目——打印出所有的“水仙花数”。 所谓“水仙花数”&#xff0c;是指一个三位数&#xff0c;其各位数字的立方和等于该数本身。例如&#xff0c;153 …

springBoot异常总结

1.springBoot的主类和springBoot的 测试类名相同: .springBoot的主类和springBoot的 测试类名相同报异常&#xff1a; java.lang.ClassNotFoundException: junit.framework.ComparisonFailure //当src/main/java文件夹下有与src/test/java文件夹下相同名字的类时&#xff0c;…

csapp proxy lab part 1

host, hub, 路由器&#xff0c;和 交换机 当手机连接到局域网中时&#xff0c;它需要找到网络中的交换机&#xff08;Switch&#xff09;。这通常是通过 DHCP&#xff08;动态主机配置协议&#xff09;完成的。DHCP服务器负责向手机分配IP地址、子网掩码、网关地址等网络配置信…

ic基础|时钟篇02:关于时钟分频器的二三事

大家好&#xff0c;我是数字小熊饼干&#xff0c;一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结&#xff0c;并通过汇总成文章的形式进行输出&#xff0c;相信无论你是在职的还是…

【js开发记录笔记】js开发记录笔记

整理的函数以及注意点 css 强制!important includes 函数 //示例&#xff1a; Input: [1, 2, 3, 4, 5].includes(2); Output: true;Input: [1, 2, 3, 4, 5].includes(9); Output: false;方法 1.同步方法获取接口返回值: new Promise((resolve) > {dataList this.Addtree…

pgsql和mysql比较

pgsql相对于mysql的优势主要体现在以下几个方面&#xff1a; 稳定性和可靠性&#xff1a;PostgreSQL的稳定性极强&#xff0c;即使在崩溃、断电等灾难场景下也能表现出很好的抗打击能力。相比之下&#xff0c;很多MySQL用户都遇到过Server级的数据库丢失的情况。此外&#xff…

windows驱动开发-32位和64位

这部分其实是过时的知识点&#xff0c;毕竟win 11之已经不支持32位系统了&#xff0c;但是还是列出来吧。 32位主要是指x86体系&#xff0c;在早期&#xff0c;32位的应用程序和系统只支持4GB的内存地址寻址&#xff0c;这也是最大的特色之一&#xff0c;在那个时代&#xff0…

嵌入式开发八:STM32启动过程分析

本次给大家分析 STM32F4 的启动过程&#xff0c;这里的启动过程是指从 STM32 芯片上电复位执行的第一条指令开始&#xff0c;到执行用户编写的 main 函数这之间的过程。我们编写程序&#xff0c;基本都是用 C 语言编写&#xff0c;并且以 main 函数作为程序的入口。但是事实上&…

1.使用uniapp搭建微信小程序项目并引入前端组件资源

文章目录 1. 项目配置1.1. 新建vue3项目1.2. 关联云空间1.3. 运行到微信开发者工具 2. 前端组件2.1. uniCloud的内置组件和扩展组件2.2. uView3.02.3. 在uniapp项目引入uview3 1. 项目配置 1.1. 新建vue3项目 由于我们要使用vue3而不是vue2&#xff0c;所以要选好版本&#x…

CMakeLists.txt语法规则:条件判断中表达式说明四

一. 简介 前面学习了 CMakeLists.txt语法中的 部分常用命令&#xff0c;常量变量&#xff0c;双引号的使用。 前面几篇文章也简单了解了 CMakeLists.txt语法中的条件判断&#xff0c;文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;条件判断说明一-CSDN博客 CMa…

【GPT调用】本地使用python调用GPT接口

python调用GPT接口 环境变量设置主调用方法执行结果 环境变量设置 .env文件中配置GPT环境变量 api_key"你的GPT-API-KEY" urlhttps://ai-proxy.ksord.com/wps.openai.azure.com/openai/deployments/gpt-4-32k/chat/completions?api-version2023-09-01-preview主调…

中国结(科普)

中国结是一种手工编织工艺品&#xff0c;它身上所显示的情致与智慧正是汉族古老文明中的一个侧面。 [1]它原本是由旧石器时代的缝衣打结&#xff0c;后推展至汉朝的仪礼记事&#xff0c;再演变成今日的装饰手艺。周朝人随身的佩戴玉常以中国结为装饰&#xff0c;而战国时代的铜…

1756jsp农产品销售管理系统Myeclipse开发mysql数据库C2C模式java编程计算机网页项目沙箱支付

一、源码特点 java 农产品销售管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…

天龙怀旧游戏python脚本

设置图&#xff1a; 游戏窗口最大化。 海贼洞这里定位你要回点的定位。 运行bat就行&#xff0c;脚本出错了还是会重新运行脚本&#xff0c;运行自动启动&#xff0c;end暂停脚本&#xff0c;home重新启动脚本 1. 我常用的是内挂回点脚本&#xff0c; 下面都是前台脚本&…

Java - 分布式逻辑事务的一些轻操作

前提条件 可控业务在不可控业务前不可控业务自己保证数据回滚一致性 设计思路 若可控业务A失败&#xff0c;则不发送给不可控业务B&#xff0c;直接回滚&#xff1b;若可控业务A成功&#xff0c;发送给不可控业务B&#xff0c;B处理完返回标记&#xff0c;B成功&#xff0c;则…

Python-100-Days: Day09 Object-oriented programming(OOP) Upgrade

1.property装饰器 之前有讨论过&#xff0c; Python中属性和方法访问权限的问题&#xff0c;不建议将属性设置为私有的&#xff0c;倘若直接将属性暴露给外界也是存在问题的。例如&#xff0c;我们没有办法检查赋给属性的值是否有效。之前的建议是将属性命名以单下划线开头&am…

C#贪吃蛇

C#贪吃蛇 文章目录 Program.csText1Game.csISceneUpdate.csText2BeginScene.csBegionOrEndScene.csEndScene.csGameScene.csText3GameObject.csIDraw.csPosition.csText4Food.csSnakeBody.csWall.csText5Map.csText6Snake.csProgram.cs using 贪吃蛇.Text1;Game game = new Ga…

Chapter 1-19. Introduction to Congestion in Storage Networks

Q: What effects does NVMe over Fabrics have on network congestion? All environments are different; hence a general answer is not possible. 所有的环境都是不同的,因此不可能给出一个笼统的答案。 The high amount of parallelism of NVMe may increase network u…

java语言数据结构(单链表)

前言 不得承认java应用的广泛&#xff0c;所以毅然决定java版本的数据结构和算法专题还是要坚决更新。每日更新2题&#xff0c;希望学习的小伙伴可以关注一波跟上&#xff0c;评论区欢迎讨论交流。 实现原理 节点&#xff08;Node&#xff09;&#xff1a;链表的基本构建单元…