STM32日历读取,设置和输出

  • 一、RTC原理
    • (一)RTC介绍
    • (二)RCT特征:
    • (三)RTC原理框图
    • (四)RTC时钟选择
    • (五)RTC复位过程
    • (六)配置RTC寄存器
    • (七)RTC时钟源
    • (八)RTC寄存器
  • 二、CubeMX建立项目
  • 三、代码
    • (一)时间日期函数
    • (二)main.c文件函数代码
  • 四、烧录结果
  • 五、总结
  • 六、参考资料

一、RTC原理

(一)RTC介绍

RTC (Real Time Clock):实时时钟

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

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

RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级指出也就在于掉电之后还可以正常运行。

两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24
小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31
天。

上电复位后,所有RTC寄存器都会受到保护,以防止可能的非正常写访问。

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

(二)RCT特征:

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

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

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

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

    • HSE时钟除以128;
    • LSE振荡器时钟;
    • SI振荡器时钟
  • 2个独立的复位类型

    • APB1接口由系统复位;
    • RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位
  • 3个专门的可屏蔽中断:

    • 1.闹钟中断,用来产生一个软件可编程的闹钟中断
    • 2.秒中断,用来产生一个可编程的周期性中断信号(长可达1秒)。
    • 3.溢出中断,指示内部可编程计数器溢出并回转为0的状态。
  • RTC时钟源
    三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

    • HSI振荡器时钟
    • HSE振荡器时钟
    • PLL时钟
  • 这些设备有以下2种二级时钟源

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

(三)RTC原理框图

(四)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_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、
RTC_CNT、RTC_ALR寄存器。

另外,对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询
RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是’1’
时,才可以写入RTC寄存器。

(七)RTC时钟源

RTC是一个独立的时钟源

(八)RTC寄存器

  • RTC控制寄存器 (RTC_CRH, RTC_CRL)
  • RTC预分频装载寄存器 (RTC_PRLH, RTC_PRLL)
  • RTC预分频余数寄存器 (RTC_DIVH, RTC_DIVL)
  • RTC计数器寄存器 (RTC_CNTH, RTC_CNTL)
  • RTC闹钟寄存器 (RTC_ALRH ,RTC_ALRL)

二、CubeMX建立项目

1.配置SYS

2.配置RCC,(设置高速外部时钟,使能外部晶振LSE)

3.配置RTC(激活时钟源(Activate Clock Source)和日历(Activate Calendar))

RTC_OUT: Not RTC_OUT
Tamper: ×

  • 第一个是是否使能 tamper(PC13)引脚上输出校正的秒脉冲时钟,
  • 第二个: RTC入侵检测校验功能
  • RTC校验功能,使能侵入检测功能。RTC时钟经64分频输出到侵入检测引脚TAMPER上
    当 TAMPER引脚上的信号从 0变成1或者从 1变成 0(取决于备份控制寄存器BKP_CR的 TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。
  • 也就是第一个是使能tamper(PC13)引脚作为时钟脉冲输出
  • 第二个是使能tamper(PC13)引脚作为入侵检测功能
  • 下面是两个RTC的中断:
    RTC全局中断RTC_IRQHandler()
    闹钟中断函数RTCAlarm_IRQHandler()

时间为创建时间2021/12/1 18:33

4.使能串口

5.时钟树配置

6.项目命名创建


7.用keil打开文件

三、代码

(一)时间日期函数

1.打开stm32f1xx_hal_rtc.h文件可以看到以下关于时间和日期的函数

2.日期结构体

3.时间结构体

(二)main.c文件函数代码

1.main.c文件中重写fputc函数,完成printf函数的重定向

//添加头文件#include "stdio.h"
int fputc(int ch,FILE *f){uint8_t temp[1]={ch};HAL_UART_Transmit(&huart1,temp,1,2);return ch;
}

2.main函数中定义时间和日期的结构体用来获取时间和日期

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

3.main函数的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);/* Display date Format : weekday */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");}

四、烧录结果

五、总结

本次实验了解了RTC原理、以及如何运用CubeMX创建项目来读取日历,并设置输出显示。

六、参考资料

STM32日历读取,设置和输出
【STM32】RTC实时时钟,步骤超细详解,一文看懂RTC

STM32日历读取,设置和输出相关推荐

  1. STM32 日历读取和输出

    文章目录 前言 1 时钟RTC简介 1.1 RTC特征 1.2 RTC原理框图 1.3 RTC具体流程 2 创建CubeMX工程 2.1 设置RCC 2.2 配置RTC 2.3 使能串口 2.4 创建 ...

  2. STM32F103C8T6使用RTC实现日历读取、设置和输出

    目录 一.使用STM32cubeMX创建项目 二.添加代码 三.结果 四.总结 五.参考链接 一.使用STM32cubeMX创建项目 前面的创建过程都差不多选芯片就完事了!直接配置开始 1.RCC配置 ...

  3. stm32 学习 (设置TIM4输出4路 pwm J-LINK仿真验证)

    使用单片机:stm32f103c8t6  资源 RAM: 20K: flash: 64K:CPU频率: 72M:通用I/O: 32个:UART: 3个:SPI:2个:USB:1个:CAN: 1个:II ...

  4. STM32系统时钟设置(标准库)

    1.STM32F407时钟树 2.系统时钟相关的结构 HSE高速外部时钟信号 锁相环PLL 锁相环的主要作用就是对时钟进行倍频,然后把时钟输出到各个功能部件.PLL有两个,一个主PLL,另一个是专用的 ...

  5. STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

    大家好!我叫肖亚平,从小热爱上了电子技术,读书时阴差阳错的选择了电子这方面的专业,学习电子技术.一直到今年毕业.对于我的理解来说,学校里面学到的技术不是全部实用,但是必须有用,所以一直奋斗在前线.我对 ...

  6. STM32配置读取BMP280气压传感器数据

    STM32配置读取BMP280气压传感器数据 BMP280是在BMP180基础上增强的绝对气压传感器,在飞控领域的高度识别方面应用也比较多. BMP280和BMP180的区别: 市面上也有一些模块: ...

  7. Android系统日历读取各厂商农历年重复event

    农历按年重复事件读取 日历业务,发现android手机设置按年重复事件,各个厂商都支持按农历年重复,比如发生时间是每月正月十五,但读取出来,日期都是设定的公历日期,在第二年就肯定错了. 比如用户添加一 ...

  8. STM32系统时钟设置,采用外部有源晶振相关配置问题

    今天在调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变.程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢. 查 ...

  9. JAVA基础初探(十二)Map接口及其常用实现类(HashMap)、File类详解(概述、创建、删除、重命名、文件属性读取/设置、遍历文件夹)

    该篇博客目录 1.Map接口及其常用实现类(HashMap.Hashtable) 2.File类(概述.创建.删除.重命名.文件属性读取/设置.遍历文件夹) 一.Map接口及其常用实现类(HashMa ...

最新文章

  1. 四轴PID控制算法详解(单环PID、串级PID)
  2. 用eval在txt中存储list,dict,tuple
  3. Qt-窗口消息处理机制及拦截消息的五种方法
  4. matlab状态方程 传递函数 可控性,实验一matlab系统的传递函数和状态空间表达式的转换...
  5. 量子计算机讲座,活动回顾|学海无涯——量子计算漫谈
  6. 【报告分享】2022年中国商业十大热点展望.pdf(附下载链接)
  7. 海外仓ERP系统功能怎么样?
  8. ROS+Gazebo仿真差速小车并实现控制
  9. rest接口webservice接口利用http请求方式发送数据
  10. Java中的对象都是在堆上分配的吗?
  11. ICCV2019-FSGAN:实现任意两张人脸图片换脸的GAN方法
  12. IDEA若依框架新建模块
  13. python query函数的用法_python help函数实例用法
  14. STM32单片机实现连接USB摄像头
  15. 信息安全概论:Hash函数概念与性质
  16. ListView 仿QQ微信侧滑出现删除按钮
  17. 广告营销DSP和DMP概念解释
  18. 判断手机号是否可注册淘宝
  19. java关于资源的描述错误的是_在Java中,下列关于读写文件的描述错误的是
  20. html 文本阅读器,在HTML中,我如何才能获得仅供屏幕阅读器(即盲人)访问的文本?...

热门文章

  1. git添加/删除远程仓库
  2. Windows系统远程连接Linux系统操作
  3. linux中i的英文单词,Linux下gcc/g++中-I(i的大写)、-L和-l
  4. Python基础——魔法方法(二)
  5. 管理 - STAR法则
  6. Elasticsearch 跨机房灾备方案实战(一) —— 消息队列实现双写
  7. 医疗his系统值不值得投入使用
  8. 斐讯R1音箱安装悟空遥控,并实现DLNA推送
  9. 「机械工程」力矩,转矩,扭矩的理解
  10. linux检查网络是否通畅_Shell脚本实现检测某ip网络畅通情况(含短信报警功能)