STM32F103 RTC实时时钟

news/2025/2/7 16:41:09/文章来源:https://www.cnblogs.com/jeikerxiao/p/18702707

STM32F103C8T6最小系统开发板使用HAL固件库实现RTC实时时钟

本文将介绍如何使用STM32F103C8T6最小系统开发板,通过HAL固件库实现RTC(实时时钟)功能。我们将详细描述硬件设计、RTC原理、软件设计以及具体操作步骤和示例代码。

1.硬件设计

STM32F103C8T6最小系统开发板集成了RTC功能,可以通过配置外部晶振(LSE)或内部低速振荡器(LSI)来提供时钟源。在硬件设计上,确保:

  1. 电源连接:为RTC模块提供稳定的电源。STM32F103C8T6的RTC模块依赖于VBAT引脚连接的备用电池(如CR2032纽扣电池),确保即使主电源断开,RTC仍能保持计时。
  2. 外部晶振连接:如果需要高精度时钟源,可以选择外接32.768kHz的晶振连接到LSE(Low-Speed External)引脚。
  3. 时钟源选择:STM32支持选择LSE(外部低速晶振)、LSI(内部低速振荡器)作为RTC时钟源。

RTC实时时钟原理

RTC模块在STM32F103C8T6中用于提供持续的时间计数功能,通常用于保持日期和时间。它能够使用外部晶振或内部振荡器来获取低频时钟信号。

STM32的RTC模块包括以下几个重要功能:

  1. 计时器功能:以秒为单位持续计时,提供当前时间(秒、分钟、小时、日期等)。
  2. 闹钟功能:RTC可以配置为定时触发闹钟中断。
  3. 备用电池:使用备用电池(如CR2032)保持RTC计时,确保电源关闭时,RTC能够继续运行。

2.软件设计

在软件层面,我们通过配置STM32F103C8T6的RTC模块,选择合适的时钟源并设置计时功能。使用HAL固件库时,可以通过HAL_RTC_Init()来初始化RTC模块,通过HAL_RTC_SetTime()HAL_RTC_SetDate()来设置时间和日期。

1. 配置时钟源

STM32F103C8T6支持LSE和LSI作为RTC时钟源。此处我们以LSE为例,配置外部32.768kHz晶振作为RTC的时钟源。

#include "stm32f1xx_hal.h"// 配置LSE作为RTC时钟源
void RTC_Clock_Config(void) {RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct = {0};// 配置LSE为RTC时钟源RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.LSEState = RCC_LSE_ON;HAL_RCC_OscConfig(&RCC_OscInitStruct);// 配置RTC时钟源RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;RCC_PeriphCLKInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct);
}

2. 初始化RTC模块

配置RTC模块的时区、时间格式以及日期。

void RTC_Init(void) {RTC_HandleTypeDef hrtc;// RTC配置hrtc.Instance = RTC;hrtc.Init.HourFormat = RTC_HOURFORMAT_24;  // 24小时制hrtc.Init.AsynchPrediv = 127;               // 异步预分频hrtc.Init.SynchPrediv = 255;                // 同步预分频hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;      // 不输出时钟hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;HAL_RTC_Init(&hrtc);
}

3. 设置时间和日期

可以通过HAL_RTC_SetTime()HAL_RTC_SetDate()函数设置当前时间和日期。

void Set_RTC_Time(void) {RTC_HandleTypeDef hrtc;RTC_TimeTypeDef sTime;RTC_DateTypeDef sDate;// 设置时间sTime.Hours = 12;sTime.Minutes = 30;sTime.Seconds = 0;sTime.TimeFormat = RTC_HOURFORMAT12_PM;HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);// 设置日期sDate.WeekDay = RTC_WEEKDAY_MONDAY;sDate.Month = RTC_MONTH_MARCH;sDate.Date = 15;sDate.Year = 23;HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
}

4. 获取当前时间和日期

可以通过HAL_RTC_GetTime()HAL_RTC_GetDate()来获取当前时间和日期。

void Get_RTC_Time(void) {RTC_HandleTypeDef hrtc;RTC_TimeTypeDef sTime;RTC_DateTypeDef sDate;// 获取时间HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);// 获取日期HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);// 显示时间和日期(具体显示方式可根据外设调整)printf("Time: %02d:%02d:%02d\n", sTime.Hours, sTime.Minutes, sTime.Seconds);printf("Date: %02d-%02d-%02d\n", sDate.Date, sDate.Month, sDate.Year);
}

5. 闹钟功能

可以配置RTC模块的闹钟功能,当时间达到预定值时触发中断。

void RTC_Alarm_Init(void) {RTC_HandleTypeDef hrtc;RTC_AlarmTypeDef sAlarm;// 配置闹钟时间sAlarm.AlarmTime.Hours = 12;sAlarm.AlarmTime.Minutes = 30;sAlarm.AlarmTime.Seconds = 0;sAlarm.Alarm = RTC_ALARM_A;HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN);
}

3.小结

通过使用STM32F103C8T6的RTC模块,我们能够轻松实现实时时钟功能。STM32的RTC支持多种时钟源、时间设置和闹钟中断功能,适用于需要精确时间跟踪的应用。本文通过详细的操作步骤和代码示例,帮助大家理解如何在STM32F103C8T6上实现RTC功能。

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

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

相关文章

Ubuntu 一次成功安装 k8s集群

Ubuntu系统设置静态固定IP保姆级教程 修改主机名 sudo hostnamectl set-hostname k8s-master关闭防火墙 systemctl status ufw.service systemctl stop ufw.service systemctl disable ufw.serviceapt-get update安装docker apt install -y docker.iosudo mkdir -p /etc/docker…

高标准农田智慧管理系统

随着科技的飞速发展,智慧农业已成为推动农业现代化的重要力量。高标准农田智慧管理系统作为智慧农业的核心组成部分,正逐步改变着传统农业的生产方式。本文将深入探讨高标准农田智慧管理系统的建设内容,以期为我国农业的可持续发展提供新的思路和方向。一、高标准农田智慧管…

老年人评估系统web端

项目结构项目实现 用到了springboot mybatis框架 vue ajax axios element 成品效果自动刷新的信息查询点击注册跳转 跳转之后的注册页面点击返回可回到主页面点击删除按钮跳转的页面点击更正信息弹出的form表单 项目功能基本实现

【土地交易大揭秘】哪些用地必须走“招拍挂”之路?

今天咱们来聊聊一个在土地市场里热度颇高的话题——哪些用地必须通过招标、拍卖或者挂牌方式出让?这可是关乎城市建设和房地产开发的大事,对投资者和普通市民来说,了解这一点至关重要。下面,我们就来深入浅出地解读一番。招标、拍卖、挂牌出让简述首先,普及一下基本概念。…

python脚本与命令行交互sys.argv

前言在 Python 编程的世界里,sys.argv 是一个强大且实用的工具,它为我们开启了与命令行交互的大门,让程序能够接收外部传入的参数,从而实现更加灵活和多样化的功能。今天,就让我们深入探索 sys.argv 的奥秘。 “argv” 即 “argument value” 是一个列表对象,其中存储的是…

奶奶都能看懂的 CSS 选择器基础语法常用属性优先级

标题都是奶奶都能看懂了,那么我们肯定从最基础的开始讲。之所以这么自信是因为能踩的坑全帮你们踩过了…… 开始之前,先来首诗感受一下,具体啥意思你看完本文就懂了。 点类井号逗为或,类多号单连为且。 id 优先类在后,类型选择在末尾。 代码优先难解决,拿出鼠标数一数。 …

本地部署大模型体验小记

本地部署大模型的工具工具 优缺点LM Studio 图形界面友好,支持API访问,参数配置灵活Ollama GPU优化不足,CPU占用率高Chatbox 易出现输入卡顿,交互体验待优化Ollama 和 Chatbox 需要配合使用。 综合看更推荐使用 LM Studio 。 自定义模型 LM Studio 和 Ollama 除了使用默认的…

oi-math 重修

OI 数学重修 注: 很多东西没来得及写例题和代码,以后遇到会补上 想了一下虽然还有很多没写完,但是这两天要开数学了,决定后面的分成一个一个博客写然后在这挂链接,所以发出来了。 主题是看着 oi-wiki 写的,但细节上尤其是证明部分不太一样,毕竟也不是什么教学性质的,权…

方差、标准差、变异系数举例

一、标准差,也称均方差,是方差的算术平方根,标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。太绕了,上例子:1、先找出平均数。平均数是数据的平均值,把数据加起来然后除以数据个数就可以得到。2、再找出方差。方差是数据偏离平均数的程度。得…

中电金信:大咖漫话|如何营销AI赋能的远程银行

看过“从远程银行看AIGC”连载,今天将与各位漫话AI的营销“哲学”。祝各位事业蟠蟠,巳巳如意,我们开年再会!