夜深人静学32系列16——RTC实时时钟

news2024/9/28 13:18:48

RTC时钟

  • RTC
    • 什么是RTC?
    • RTC结构框图
    • CubeMX配置
    • RTC代码配置
  • 实战——简易时钟
    • 任务要求
    • 代码实现
    • 实验结果
  • 补充
    • 唤醒功能配置
    • 代码如下:

RTC

什么是RTC?

RTC(Real Time Clock):实时时钟

RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期。

简单来说,RTC是一个特殊的定时器,通常作为闹钟、日历、以及定时自动唤醒功能。这一期我们来讲以下RTC的闹钟功能

RTC结构框图

在这里插入图片描述
以上是RTC使用时钟功能的部分结构框图,具体流程如下:

  1. 选择时钟源,我们通常使用LSE(32.768KHz)
  2. 对时钟源进行分频得到1Hz的频率,通常设置异步分频器为128分频,同步分频器为256分频。
  3. 每来一个时钟信号,时间加增加,当时间寄存器的值与闹钟寄存器的值相同时,产生中断。

注意:这里我们不需要对时间的进位进行计算,只需要控制计数器的时钟信号为1Hz即可保证RTC准确走时。

关于RTC的基本知识,我们这里不做介绍,大家可以自行学习
下面我们来讲讲CubeMX的配置

CubeMX配置

  1. 首先我们要在RCC选项开启LSE(外部低速晶振)
    在这里插入图片描述

  2. 开启RTC
    在这里插入图片描述

  3. 配置 RTC
    在这里插入图片描述

  4. 时钟配置
    在这里插入图片描述

以上就是RTC的配置过程,接下来是代码的配置过程:

RTC代码配置

  1. RTC基本驱动步骤
    在这里插入图片描述
  2. RTC闹钟配置
    在这里插入图片描述

实战——简易时钟

任务要求

  • 通过实现NANO板上的RTC功能,设计一个简易时钟,
  • 闹钟要求具有闹钟功能,当到达闹钟设置时间是,执行相应动作
  • 通过串口打印相印信息,1s打印一次

代码实现

1. main函数

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_RTC_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      HAL_RTC_GetDate(&hrtc,&GET_Date,RTC_FORMAT_BIN);      //获取日期
  printf("%02d/%02d/%02d\r\n",2000 + GET_Date.Year,GET_Date.Month,GET_Date.Date);   //打印日期
       HAL_RTC_GetTime(&hrtc,&GET_Time,RTC_FORMAT_BIN);     //获取时间
      printf("%02d:%02d:%02d\r\n",GET_Time.Hours,GET_Time.Minutes,GET_Time.Seconds);    //打印时间
      printf("\r\n");       //换行
  HAL_Delay(1000);          //1s执行一次以上内容
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

2 . 闹钟事件中断服务函数

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
   if(hrtc->Instance == RTC)
   {

    printf("CLOCK_EVENT");
   }       
}

实验结果

在这里插入图片描述

以上就是RTC闹钟的全部内容…………

补充

唤醒功能配置

在这里插入图片描述
这里是设置每10s触发一次唤醒中断。

在这里插入图片描述
在这里插入图片描述

代码如下:

编写如下中断服务函数,即可在唤醒中断执行相应动作。

void   HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
         printf("WKUP_EVENT");
}

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

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

相关文章

chatgpt赋能python:Python中如何清屏

Python中如何清屏 在Python编程中,有时候我们需要清除屏幕以方便我们查看输出,或者在一些UI开发中,需要在用户交互后清除屏幕并重新渲染界面。本文将介绍Python中如何清屏。 使用os模块的system函数 os模块提供了执行操作系统命令的接口&a…

Struts2 012 漏洞分析

0x00 前言 之前的003,005,009都是基于参数本身的ONGL注入,012则是基于参数值的ONGL注入 0x01 环境 还是建议使用vulhub poc: 无回显 %{(#context[xwork.MethodAccessor.denyMethodExecution]false)(#_memberAccess[allowStaticMethodAccess]true)(java.lang.R…

chatgpt赋能python:Python中如何停止运行程序

Python中如何停止运行程序 Python 是一种功能丰富、灵活的编程语言,但有时候你需要停止运行你的程序,无论是因为出现了错误,或者因为完成了你想要的任务。在本文中,我们将介绍 Python 中停止运行程序的几种方法,以及对…

Angular学习笔记:动画

本文是自己的学习笔记,主要参考资料如下。 - Angular官方文档:https://angular.io/guide/animations 1、前置工作1.1、导入依赖 2、代码部分2.1、有关的imports2.2、定义触发条件(trigger)2.3、定义状态(state&#…

chatgpt赋能python:Python中如何排序

Python中如何排序 Python是一门功能强大的编程语言,拥有丰富的库和模块来满足各种需求。在Python中,排序是一项常见的任务,它可以帮助我们对数据进行整理和分析。本文将介绍Python中如何排序,包括排序算法和相关的库函数。 排序…

SysInfo(电脑系统信息)0.0.0.1beta2

文件说明符 : D:\masm32\wmi\sysInfo\sysInfo0.0.0.1beta2.exe 属性 : A--- 数字签名:否 PE文件:是 语言 : 中文(简体,中国) 文件版本 : 0.0.0001 beta2 说明 : 电脑系统信息 版权 : PurpleEndurer 产品版本 : 0.0.0001 beta2 产品名称 : 电脑系统信息 公司名称 : P…

oracle--常用维护语句

1、sqlpus 连接 [rootdb-server ~]$su - oracle ##切换oracle用户 [oracledb-server ~]$ sqlplus /nolog ##启动客户端进程 SQL>conn zyl/zyl2022 ##普通用户登录 SQL>conn / as sysdba ##管理员登录 Connected. SQL> 2、启动或关闭数据库 SQL>startup…

【项目实战】三维重建:基于RGB-D数据集的TSDF算法

文章目录 一、项目简介二、算法原理2.1、每个体素都有两个值:TSDF值(用于生成重建表面)、RGB灰度值(给重建表面贴上彩色纹理)2.2、TSDF算法步骤一:体素体建立步骤二:划分网格(体素化…

2023-05-30 Unity 2进制6——Excel写入器ExcelWriter

文章目录 一、Epplus 使用二、ExcelWriter(一)文件结构(二)操作说明(三)操作示例(四)完整代码 一、Epplus 使用 (一)获取 Excel 文件 string filePath App…

一图看懂 autopep8 模块:自动格式化Python代码,以使其符合PEP8规范,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 autopep8 模块:自动格式化Python代码,以使其符合PEP8规范,资料整理笔记(大全) 🧊摘要🧊模块图&#…

2022年软件测试人员调查统计

1、软件测试从业人员的年龄分布 测试行业的主力军年龄分布主要是集中在 26-30 岁这个区间,这部分的群体承担着行 业发展的主导力量,占 43.2%。根据数据显示,被调查者中占比最多的是 26-30 岁区间的软件测试从业人员,26-30 岁的测试…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(二)

今天开始使用 vue3 ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行&…

Leetcode 2455 可被三整除的偶数的平均值

Leetcode 2455 可被三整除的偶数的平均值 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/average-value-of-even-numbers-that-are-divisible-by-three/description/ 博主Github:https://github.com/GDUT-…

Paper:《Is GPT-4 a Good Data Analyst?GPT-4是一个好的数据分析师吗?》翻译与解读

Paper:《Is GPT-4 a Good Data Analyst?GPT-4是一个好的数据分析师吗?》翻译与解读 导读:该论文提出了一个框架,用来引导GPT-4进行端到端的数据分析任务,包括数据提取、可视化生成以及数据分析。GPT-4 能生成SQL查询来…

chatgpt赋能python:Python中的切片操作

Python中的切片操作 介绍 在Python中,切片操作是一种常用的操作方式,可以快速地获取列表、元组、字符串等类型的一部分数据。切片操作通常使用冒号来表示,其形式为[start:stop:step],其中start是起始位置,stop是结束位置(不包含…

编译型语言和解释型语言的定义与区别

目录 编译型语言 1) 可执行程序不能跨平台 2) 源代码不能跨平台 解释型语言 关于Python 总结 通过高级语言编写的源码,我们能够轻松理解,但对于计算机来说,它只认识二进制指令,源码就是天书,根本无法识别。源码要…

redhat7多种服务配置(Telnet/VNC/FTP/HTTP/Samba)

老师布置的作业,然后就是配置成功了,像重新配置一遍,也对此总结一下. 链接是参考,可以不用看,直接从我写的主体部分开始,要输入的命令我都有标注,没标注的都是说明,不用从链接里面开始哈!!!! 假设我们一直把yum配置好…

SQL server入门一【简单介绍与简单建表】

SQLserver登录方式 Windows身份验证 用户名登录 通常登录名为sa,密码为下载时设置的密码 SQL server建立一个数据库 数据库中建表存储数据(输入命令建表) 数据库的简单介绍与概念 含义 可以对数据进行存储和管理的软件以及数据本身统称为数据库 组成 数据库由表…

chatgpt赋能python:Python中安装re模块–详细介绍与步骤

Python中安装re模块 – 详细介绍与步骤 Python中的re模块是一种强大的正则表达式工具,它可以让我们快速方便地进行字符串的匹配和查找。在Python中安装re模块非常简单,本文将为大家详细介绍安装步骤。 什么是re模块 re模块是Python中的正则表达式模块…

Vue实例

1. 自定义元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…