文章目录

  • 前言
  • 一、RTC是什么?
    • 1、定义
    • 2、原理
  • 二、配置项目
  • 三、配置代码
    • 1、重定向printf函数
    • 2、效果(1)
    • 3、添加星期
    • 4、效果(2)
  • 四、总结
  • 五、参考资料

前言

  • 硬件:stm32f103c8t6 核心板
  • 软件:STM32CubeMX 6.4.0
  • 软件:keil5 mdk
  • 软件:野火串口调试助手

一、RTC是什么?

1、定义

RTC (Real Time Clock):实时时钟。

RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元.

在断电情况下 RTC仍可以独立运行 只要芯片的备用电源一直供电,RTC上的时间会一直走。

1、RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级指出也就在于掉电之后还可以正常运行。
2、两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。
3、上电复位后,所有RTC寄存器都会受到保护,以防止可能的非正常写访问。

无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC使不会停止工作。

RCT特征:
可编程的预分频系数:分频系数高为220。
32位的可编程计数器,可用于较长时间段的测量。
2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟 频率的四分之一以上)。
可以选择以下三种RTC的时钟源
● HSE时钟除以128;
● LSE振荡器时钟;
● LSI振荡器时钟

2个独立的复位类型
● APB1接口由系统复位;
● RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位

3个专门的可屏蔽中断

 ● 1.闹钟中断,用来产生一个软件可编程的闹钟中断。● 2.秒中断,用来产生一个可编程的周期性中断信号(长可达1秒)。● 3.溢出中断,指示内部可编程计数器溢出并回转为0的状态。

RTC时钟源
三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

● HSI振荡器时钟
● HSE振荡器时钟
● PLL时钟

这些设备有以下2种二级时钟源:

● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。 RTC用于从停机/待机模式下自动唤醒系统。
● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。

2、原理

RTC原理框图

RTC时钟的框图分成 两个部分:

APB1 接口:用来和 APB1 总线相连。 此单元还包含一组 16 位寄存器,可通过 APB1 总线对其进行读写操作。APB1 接口由 APB1 总 线时钟驱动,用来与 APB1 总线连接。

通过APB1接口可以访问RTC的相关寄存器(预分频值,计数器值,闹钟值)。

RTC 核心接口:由一组可编程计数器组成,分成 两个主要模块
g)

第一个模块是 RTC 的 预分频模块,它可编程产生 1 秒的 RTC 时间基准 TR_CLK。RTC 的预分频模块包含了一个 20 位的可编程分频器(RTC 预分频器)。如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个 TR_CLK 周期中 RTC 产生一个中断(秒中断)。

第二个模块是一个 32 位的可编程计数器 (RTC_CNT),可被初始化为当前的系统时间,一个 32 位的时钟计数器,按秒钟计算,可以记 录 4294967296 秒,约合 136 年左右,作为一般应用,这已经是足够了的。

RTC具体流程:

RTCCLK经过RTC_DIV预分频,RTC_PRL设置预分频系数,然后得到TR_CLK时钟信号,我们一般设置其周期为1s,RTC_CNT计数器计数,假如1970设置为时间起点为0s,通过当前时间的秒数计算得到当前的时间。RTC_ALR是设置闹钟时间,RTC_CNT计数到RTC_ALR就会产生计数中断,

  • RTC_Second为秒中断,用于刷新时间,
  • RTC_Overflow是溢出中断。
  • RTC Alarm 控制开关机

RTC时钟选择

使用HSE分频时钟或者LSI的时候,在主电源VDD掉电的情况下,这两个时钟来源都会受到影响,因此没法保证RTC正常工作.所以RTC一般都时钟低速外部时钟LSE,频率为实时时钟模块中常用的32.768KHz,因为32768 = 2^15,分频容易实现,所以被广泛应用到RTC模块.(在主电源VDD有效的情况下(待机),RTC还可以配置闹钟事件使STM32退出待机模式).

RTC复位过程

除了RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器外,所有的系统寄存器都由系统复位或电源复位进行异步复位。
RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器仅能通过备份域复位信号复位。

系统复位后,禁止访问后备寄存器和RCT,防止对后卫区域(BKP)的意外写操作

RTC中断
秒中断
这里时钟自带一个秒中断,每当计数加一的时候就会触发一次秒中断,。注意,这里所说的秒中断并非一定是一秒的时间,它是由RTC时钟源和分频值决定的“秒”的时间,当然也是可以做到1秒钟中断一次。我们通过往秒中断里写更新时间的函数来达到时间同步的效果

闹钟中断
闹钟中断就是设置一个预设定的值,计数每自加多少次触发一次闹钟中断

二、配置项目

默认你已经创建了一个新项目

  • 时钟RCC配置,将HSE和LSE均选为外部晶振模式

  • SYS设置,选择Serial Wire模式。

  • 配置RTC

  • 设置时间

初始时间为0年1月1号。修改成下面:

  • 设置USART

  • 时钟树设置

设置工程路径、工程名,最后导出文件。使用keil打开并进行编写。

三、配置代码

1、重定向printf函数

分别在main.c和usart.c文件添加头文件

#include "stdio.h"

keil配置允许重定向


在main.c文件中重写printf函数:

int fputc(int ch, FILE *f){HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;}

定义结构体类型用于获取数据

下面的语句指向的是hal库已经封装好了的结构体。

RTC_DateTypeDef GetData;  //获取日期结构体
RTC_TimeTypeDef GetTime;   //获取时间结构体

在while函数里添加

/* Get the RTC current Time */HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);/* Get the RTC current Date */HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);/* Display date Format : yy/mm/dd */printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);/* Display time Format : hh:mm:ss */printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);printf("\r\n");HAL_Delay(1000);
  • 编译烧录均无问题。

2、效果(1)

20221103_223213

3、添加星期

在输出年月日的语句下添加星期判断

if(GetData.WeekDay==1){printf("星期一\r\n");}else if(GetData.WeekDay==2){printf("星期二\r\n");}else if(GetData.WeekDay==3){printf("星期三\r\n");}else if(GetData.WeekDay==4){printf("星期四\r\n");}else if(GetData.WeekDay==5){printf("星期五\r\n");}else if(GetData.WeekDay==6){printf("星期六\r\n");}else if(GetData.WeekDay==7){printf("星期日\r\n");}

4、效果(2)

20221103_223612


四、总结

此次实验较为简单,在通过STMCube配置好了以后只需要我们重定向一下输出函数,然后通过定义结构体对象获取时间数据用于输出即可。

五、参考资料

https://blog.csdn.net/as480133937/article/details/105741893

了解实时时钟RTC的原理并通过stm32实现STM32的日历读取、设置和输出相关推荐

  1. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读

    记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...

  2. 【嵌入式】MSP430系统实时时钟RTC学习日志(完善中)

    目录 MSP430系统实时时钟RTC [时钟初始化]系统时钟初始化需要注意的问题 MSP430F149时钟源选择(部分转) MSP430 系统时钟 ACLK.MCLK.SMCLK [MSP430时钟] ...

  3. 【STM32学习】实时时钟 —— RTC

    [STM32学习]实时时钟 -- RTC 零.参考 一.工作原理 1.RTC介绍 2.工作过程 二.相关寄存器 三.代码说明 1.rtc初始化 2.关于中断 3.中断配置代码(仅供参考) 3.1 秒中 ...

  4. stm32之实时时钟RTC(掉电计时保持、秒中断、闹钟中断、溢出中断)

    前言:stm32系列产品普遍都有实时时钟RTC模块,它提供一个掉电保持计时功能,掉电后由后备供电区域供电.除了提供时间和日期之外,还可以设置闹钟提醒,且可以在待机模式下设置闹钟唤醒系统.在一些小容量. ...

  5. linux设备树例程,iTOP-iMX6-设备树内核-实时时钟RTC以及Linux-c测试例程

    当 Linux 开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: • ...

  6. ESP32设备驱动-DS3231实时时钟(RTC)驱动

    DS3231实时时钟(RTC)驱动 1.DS3231介绍 DS3231 是一款低成本.极其精确的 I2C 实时时钟 (RTC),具有集成的温度补偿晶体振荡器 (TCXO) 和晶体. 该设备包含电池输入 ...

  7. ESP8266-Arduino编程实例-PCF8563实时时钟(RTC)驱动

    PCF8563实时时钟(RTC)驱动 1.PCF8563介绍 PCF8563 是针对低功耗优化的 CMOS 实时时钟 (RTC) 和日历. 还提供了可编程时钟输出.中断输出和低电压检测器. 所有地址和 ...

  8. imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程

    当Linux开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: /de ...

  9. 实时时钟 (RTC)

    文章目录 一.RTC简介 二.主要特性 三.功能描述 1. 概述 2. 复位过程 3. 读RTC寄存器 4. 配置RTC寄存器 5. RTC标志的设置 四.RTC寄存器描述 1. RTC控制寄存器高位 ...

最新文章

  1. 视觉惯性SLAM:VINS-Mono
  2. mysql基础之视图
  3. C++学习网站。两个 CodeProject,Codeguru
  4. linux系统不关机添加硬盘吗,CentOS中不重启添加硬盘
  5. codeforces 450B. Jzzhu and Sequences 解题报告
  6. 探索Julia(part13)--多分派
  7. oracle中的service_name,instance_name,db_name,oracle_sid,sid_name的用法及区别(转)
  8. 漫画:程序员真是太太太太太有趣了!
  9. 007_控制器可扩展性
  10. 一键打造全栈式小程序开发者!
  11. 性能测试指标(重要)
  12. Git操作的基本命令
  13. WPF参考书籍及资料推荐(转)
  14. CentOS 7 配置Ruby语言开发环境
  15. itextpdf 怎么下划线_itext生成pdf设置下划线,itextpdf下划线,使用setUnderli
  16. Java学习 day7 (常用API)Scanner类.Random类.Arraylist类
  17. 无限地球危机的观看顺序
  18. 游戏开发物理引擎PhysX研究系列:将重力模拟关闭
  19. 计算机程序设计员理论练习
  20. BZOJ4716 假摔

热门文章

  1. ROS系列(四):ROS通信机制系列(3):参数服务器
  2. 解决 rsync: failed to connect to xxx.xxx.xxx.85 (xxx.xxx.xxx.85): No route to host (113) 问题
  3. 骑士周游(马踏棋盘)问题
  4. 2021-03-30
  5. 实验四 微程序控制器实验
  6. zabbix数据采集方式
  7. js监听手机屏幕旋转
  8. mac 文字识别软件ocr_mac超快速ocr文字识别软件 mac上超好用的文字识别软件推荐...
  9. Sloan中性群落模型(NCM)推断群落构建原理及其R实现
  10. Sunshine数据库篇之查询