如何编写STM32的RTC程序

编写STM32的RTC程序通常包括以下步骤:

1. 配置RTC时钟源
RTC时钟源可以是内部或外部的低速时钟(LSE或LSI),也可以是HSE时钟分频后得到的。通常情况下,使用外部32.768kHz的LSE作为RTC时钟源,因为它精度高且稳定。

RCC_LSEConfig(RCC_LSE_ON); // 开启外部低速晶振
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); // 等待LSE稳定就绪
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 选择LSE作为RTC时钟
RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟

2. 等待RTC寄存器同步
由于RTC区域的时钟比APB时钟慢,访问前需要进行时钟同步,确保数据的一致性。

RTC_WaitForSynchro();

3. 配置RTC预分频器
设置RTC的预分频器,以便得到适合的时钟频率驱动RTC计数器。通常将输入的32768Hz的RTCCLK进行32768分频得到实际驱动计数器的时钟1Hz。

RTC_InitTypeDef RTC_InitStructure;
RTC_InitStructure.RTC_AsynchPrediv = 128 - 1; // 异步分频系数
RTC_InitStructure.RTC_SynchPrediv = 256 - 1; // 同步分频系数
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; // 24小时制
RTC_Init(&RTC_InitStructure);

4. 设置RTC时间和日期
设置RTC的当前时间和日期。

RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;// 设置时间:时、分、秒
RTC_TimeStructure.RTC_Hours = 0x16; // 16代表16点
RTC_TimeStructure.RTC_Minutes = 0x06; // 06代表6分
RTC_TimeStructure.RTC_Seconds = 0x00; // 00代表0秒
RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);// 设置日期:年、月、日、星期
RTC_DateStructure.RTC_Year = 0x21; // 21代表2021年
RTC_DateStructure.RTC_Month = 0x09; // 09代表9月
RTC_DateStructure.RTC_Date = 0x14; // 14代表14号
RTC_DateStructure.RTC_WeekDay = 0x02; // 02代表周二
RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);

5. 使能RTC和配置备份寄存器
使能RTC,并在备份寄存器中写入一个标志值,用于区分是否是第一次初始化RTC。
 

RTC_WaitForLastTask(); // 等待上一次写操作完成
RTC_SetCounter(0); // 设置RTC计数器的初始值
RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2); // 写入备份寄存器

6. 读取RTC时间和日期
编写函数来读取RTC的时间和日期。

void MyRTC_ReadTime(void) {RTC_TimeTypeDef RTC_TimeStructure;RTC_DateTypeDef RTC_DateStructure;RTC_GetTime(RTC_Format_BCD, &RTC_TimeStructure); // 读取时间RTC_GetDate(RTC_Format_BCD, &RTC_DateStructure); // 读取日期// 将读取的时间和日期值赋给变量,以便使用uint8_t hours = RTC_TimeStructure.RTC_Hours;uint8_t minutes = RTC_TimeStructure.RTC_Minutes;uint8_t seconds = RTC_TimeStructure.RTC_Seconds;uint16_t year = RTC_DateStructure.RTC_Year;uint8_t month = RTC_DateStructure.RTC_Month;uint8_t day = RTC_DateStructure.RTC_Date;// ... 根据需要处理时间日期数据
}

以上步骤提供了一个基本的框架,用于编写STM32的RTC程序。确保你已经正确配置了RTC时钟源、预分频器、时间和日期,并在需要时读取RTC的时间和日期。这样,RTC就可以在各种应用中提供准确的时钟和日历功能了。
 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

lc 142 环形链表II

先判断存在环形链表,然后根据 x z,得到入口 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val x; * next null; * } * } */ public class Sol…

骑行,每天骑行多少最好?

热爱骑行的人都知道,每一次转动踏板都像是与风的对话,与大地的亲吻。我们校长骑行群的伙伴们,如同追逐自由的飞鸟,在骑行的道路上享受着速度与激情、宁静与思考。然而,一个看似简单却至关重要的问题常常萦绕在我们心头…

智能驾驶系列报告之一:高精度定位,智能驾驶的可靠辅助

城市导航辅助驾驶迅速落地,高精度定位迎来发展契机:首先,以城市 NOA为代表的 L3 级别功能正快速落地,智能驾驶已成各车企竞争的核心领域,搭载城市 NOA 功能的车型数量及渗透率快速提升。伴随电动化和智能化的提升&…

LeetCode136只出现一次的数字I

题目描述:给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 看到这个题第一想法应该是使用map记录数字及数字出现的次数,如果原数组长度为n,则map的记录条…

React 前端使用 Input 输入框的样式上传一个 Excel 文件并读取内容对象数组

本文讲解了关于如何在 React 前端使用 Input 输入框上传一个 Excel 文件,并读取文件内容转成 json 数据格式(对象数组)。 文章目录 1、Excel 文件展示2、完整代码3、数据结果展示4、前端样式展示5、使用 button 按钮的前端样式 1、Excel 文件…

Kubernetes:(五)Pod 基础概念

文章目录 一、Pod基础概念pod的状态容器(Container)生命周期pod创建容器的过程: 二、底层容器Pause三、初始化容器(initcontainers)四、Pod容器的分类五、镜像拉取策略(image PullPolicy)六、重…

【Vue 全家桶】2、Vue 组件化编程

目录 模块与组件、模块化与组件化 component模块组件 非单文件组件单文件组件 .vue 模块与组件、模块化与组件化 component 模块 组件 局部功能代码和资源的集合 非单文件组件 // 1、创建组件 const school Vue.extend({data(){return {}} }) const student Vue.extend(…

IPC-A-610J-中文版 CHINESE-中文版 2024 电子组件的可接受性

IPC-A-610J-中文版 CHINESE-中文版 2024 电子组件的可接受性.pdf 链接: https://pan.baidu.com/s/1UreAzlB_P7tGH_WoFL2Ybg?pwd1234 提取码: 1234 https://share.weiyun.com/eQCyAPYh 通过网盘分享的文件:IPC-A-610J-中文版 CHINESE-中文版 2024 电子组件的可接受性…

el-input限制只能输入合法的数字

// 校验输入的数字是一个合法有效的数字 export function setValue(e) {return e.replace(/[^0-9.]/g, "") // 移除非法字符 .replace(/^0/, "0").replace(/^0(\d|\.$)/, "0$1") // 只保留一个开头的零(如果存在)&#x…

智能AI快速生成演示文

文多多AIPPT:智能AI快速生成演示文稿,仅需提供核心主题,1分钟内即可完成PPT创作! 通过点击图片或链接进行注册,您将获得9次免费体验文多多AIPPT的机会。https://docmee.cn/?sourceiui 当谈到PPT,很多人的第…

google adsense广告费中国收款结算被银行拒解决办法

多年前搞了几个网站,挂了谷歌google adsense广告,不知道不觉到了100美金最低结算,谷歌给我打款,之前是绑定交银银行的。被银行镜内登陆谷歌不合法不合规给拒绝入账,把美金退回了,怎么办? googl…

小语言模型介绍与LLM的比较

小模型介绍 小语言模型(SLM)与大语言模型(LLM)相比,具有不同的特点和应用场景。大语言模型通常拥有大量的参数(如 GPT-3 拥有 1750 亿个参数),能够处理复杂的自然语言任务&#xff…

哲学家就餐问题(Java实现信号量和PV操作)

哲学家就餐是经典的PV操作。 一个哲学家同时拿起左边的筷子和右边的筷子进行就餐,每一个哲学家都会等待右边的筷子,具备了死锁问题之一的循环等待。 基础的哲学家就餐问题代码 在Java中,Semaphore 是一个用于控制对某个资源的访问的同步工具…

TwinCL: A Twin Graph Contrastive Learning Model for Collaborative Filtering

TwinCL: A Twin Graph Contrastive Learning Model for Collaborative Filtering 摘要 在推荐和协同过滤领域,图对比学习(Graph Contrasive Learning,GCL)已经成为一种有影响的方法。然而,对比学习有效性的原因还没有…

虚拟现实辅助工程技术如何加速汽车设计与制造

汽车行业正面临着以超常速度进行创新的压力,以满足新出现的环境、技术和社会需求。这就要求产品开发具有极高的效率和准确性。传统的汽车产品开发周期通常依赖于大量的物理原型和实际测试。这些设计周期冗长、成本高昂、资源密集,当需要更改设计时&#…

基于卷积神经网络的农作物病虫害识别系统(pytorch框架,python源码)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示: 基于卷积神经网络的农作物病虫害检测(pytorch框架)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的农作物病虫害识别系统是在pytorch框架下实现的…

现代配电系统中的预付费电能计量装置有哪些功能?

随着社会的快速发展和用电需求的不断增长,传统的后付费电能计量方式逐渐暴露出诸如欠费问题、计费不准确、管理复杂等缺点,无法适应日益复杂的电力供应和消费需求。预付费电能计量装置作为一种新型的电能管理方式,因其具备便捷、智能等特点&a…

优化文本嵌入,大幅提升RAG检索速度

大家好,文本嵌入技术能够将文字信息转换成高维向量表示的数字,提供了一种理解和处理文本数据的新方式,帮助我们更好地理解和处理文本数据。这些向量能够捕捉文本的深层特征,进而支持多种应用,比如理解语义、进行文本分…

【通信领域术语】MNO 和 MVNO 的简介

定义与关系 MNO 和 MVNO 是两种不同类型的移动运营商。 MNO(Mobile Network Operator,移动网络运营商)指利用物理网络基础设施提供移动服务的一种移动服务提供商。 MVNO(Mobile Virtual Network Operator,虚拟移动网络运营商)不拥有网络基础设施。 两者最大的区别在于,…

868历年真题算法设计题+程序设计题

11.52013年真题*4 一天四道太顶了,11.6-11.15先且两天四道题,先把数学二轮三轮结束! 如果程序设计题写不了 核心算法 ,但是把思路写上去,只将核心函数空出来也能拿些分!!DFS大概率不会和stack同…