STM32的RTC使用

2023-11-06

初始化RTC

#define RTC_SET_CONFIG_FLAG	0x6066/**< RTC设置完成标志*/

/*判断是否第一次配置*/
if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1) != RTC_SET_CONFIG_FLAG)
{
	/*设置时间为:2020-5-28-周四,1点7分0秒*/
	RTC_Set_DateTime(20 ,5 ,28 ,4 ,1 ,7 ,0);
 	/*设置已初始化标志*/
 	/*取消备份区域写保护*/
	HAL_PWR_EnableBkUpAccess();                       
	HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,RTC_SET_CONFIG_FLAG);
}

/**
  * @fn RTC_Set_DateTime
  * @brief 设置RTC日期时间
  * @details 
  * @param[in] None
  * @return None
  * @note None
  * @attention None
  */
void RTC_Set_DateTime(uint8_t year ,uint8_t month ,uint8_t date ,uint8_t weekday ,uint8_t hour, uint8_t minute ,uint8_t sec)
{
	RTC_Set_Date(year ,month ,date ,weekday);
	RTC_Set_Time(hour ,minute ,sec);
}

设置时间保存时间

/**
  * @fn RTC_Set_Time
  * @brief 设置RTC时间
  * @details 
  * @param[in] 时 分 秒
  * @return None
  * @note None
  * @attention None
  */
void RTC_Set_Time(uint8_t Hours ,uint8_t Minutes ,uint8_t Seconds)
{
    RTC_TimeTypeDef ConfigTime;
    ConfigTime.Hours = Hours;            
    ConfigTime.Minutes = Minutes;          
    ConfigTime.Seconds = Seconds; 
    if(HAL_RTC_SetTime(&hrtc, &ConfigTime, RTC_FORMAT_BIN) != HAL_OK)
    {
      Error_Handler();
    }
}

/**
  * @fn RTC_Set_Date
  * @brief 设置RTC日期
  * @details 
  * @param[in] 年 月 日 周
  * @return None
  * @note None
  * @attention None
  */
void RTC_Set_Date(uint8_t Year ,uint8_t Month ,uint8_t Date ,uint8_t WeekDay)
{
  RTC_DateTypeDef ConfigDate;     
  ConfigDate.Year = Year; 
  ConfigDate.Month = Month;
  ConfigDate.Date = Date; 
  ConfigDate.WeekDay = WeekDay;  
  if(HAL_RTC_SetDate(&hrtc, &ConfigDate, RTC_FORMAT_BIN) != HAL_OK)
  {
    Error_Handler();
  }
}

获取实时时间

typedef struct DateTime
{
	uint8_t Year;
	uint8_t Month;
	uint8_t Date;
	uint8_t WeekDay;
	uint8_t Hours;
	uint8_t Minutes;
	uint8_t Seconds;
}DateTime_Typedef;

/**
  * @fn Get_CurrentTime
  * @brief 获取当前时间
  * @details None
  * @param None
  * @return -1:获取时间失败 0:成功
  * @note None
  * @attention None
  */
int Get_Date_Time(DateTime_Typedef *pDateTime)
{
    RTC_DateTypeDef CurrentDate;
    RTC_TimeTypeDef CurrentTime;
	
	/*先获取时间,再获取日期,否则有时延*/
    if((HAL_OK == HAL_RTC_GetTime(&hrtc, &CurrentTime, RTC_FORMAT_BIN))
       && HAL_OK == HAL_RTC_GetDate(&hrtc, &CurrentDate, RTC_FORMAT_BIN))
    {
    	/*获取年月日*/
        pDateTime->Year = CurrentDate.Year+2000;
        pDateTime->Month= CurrentDate.Month;
        pDateTime->Date = CurrentDate.Date;
        pDateTime->WeekDay = CurrentDate.WeekDay;
        pDateTime->Hours =  CurrentTime.Hours;
        pDateTime->Minutes =  CurrentTime.Minutes; 
        pDateTime->Seconds = CurrentTime.Seconds;
        return 0 ;
    }
    return -1 ;
}

RTC后备区另类使用

typedef struct 
{
	uint16_t year;
	uint16_t Month;
	uint16_t Date;
	uint16_t WeekDay;
}ConfigPar_t;
 
/**
  * @fn Save_Config_Par
  * @brief 后备区保存参数
  * @details None
  * @param[in] configpar
  * @return None
  * @note None
  * @attention None
  */
void Save_Config_Par(ConfigPar_t *pData)
{
	/*取消备份区域写保护*/
	HAL_PWR_EnableBkUpAccess();
	HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,pData->Year);
	HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR2,pData->Month);
	HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR3,pData->Date);
    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR4,pData->WeekDay);
}

/**
  * @fn Read_Config_Par
  * @brief 后备区读取保存的参数
  * @details None
  * @param[in] pData
  * @param[out] pData
  * @return None
  * @note None
  * @attention None
  */
void Read_Config_Par(ConfigPar_t *pData)
{
	pData->Year = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1);
	pData->Month = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR2);
	pData->Date = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR3);
    pData->WeekDay = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR4);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32的RTC使用 的相关文章

  • RPM 的 spec 文件如何编写

    在关于 RPM 软件包构建的上一篇文章中 你了解到了源 RPM 包括软件的源代码以及 spec 文件 这篇文章深入研究了 spec 文件 该文件中包含了有关如何构建 RPM 的指令 同样 本文以 fpaste 为例 了解源代码 在开始编写

随机推荐

  • 全球及中国汽车用导航行业应用前景与销售渠道分析报告2022-2028年

    全球及中国汽车用导航行业应用前景与销售渠道分析报告2022 2028年 修订日期 2022年1月 专员对接 周文文 查询鸿晟信合研究院了解详细内容 第一章 汽车用导航产业概述 1 1 汽车用导航定义及产品技术参数 1 2 汽车用导航分类 1
  • Idea:修改新项目默认设置

    修改Idea新项目默认设置 使用idea开发时 即使在settings设置项目配置 如maven 在新建项目也会发现项目配置变为默认 这时需要设置新建项目配置 配置步骤 File New Projects Setup Settings fo
  • Log4j 配置文件(log4j.properties)的所在路径问题

    一般我们直接将log4j properties放置在src目录下 这样系统自动会找到的 其实就是放在WEB INF classes文件下 这个路径在classpath下 所以直接就能找到 我们写Logger的时候如下 public clas
  • Servlet配置、会话管理——Servlet【总结】

    Servlet配置 初始化参数 Servlet除了可以从请求信息中获取信息外 还可以从配置文件中获取配置参数信息 配置文件中的参数信息与具体的请求无关 而是Servlet初始化时调用的 如此可以避免硬编码信息 提高Servlet的可移植性
  • 创建的源文件后缀不是.c,在一些编译器上不能编译

    问题描述 源文件的名字和后缀写的比较随意 后缀不是 c 代码没有语法高亮 可能在一些编译器上不能编译通过 现象 解决办法 C语言代码中我们有约定 源文件的后缀是 c 头文件的后缀是 h 这样在大部分的IDE中代码打开都是有语法高亮的
  • 想学软件开发做程序员,学习Python必备的Python从入门到精通约650GB全面学习资料

    先简单介绍一下Python的情况 后面文章最后附有零基础自学Python从入门到精通学习Python的视频文档源码低阶到高阶等全面学习资料约650GB 1 什么是PythonPython 是一个有条理的和强大的面向对象的程序设计语言 类似于
  • 使用 Selenium 和 Python 爬取股票网站历史资金数据的简易教程

    一 需求及技术介绍 在金融投资领域 了解股票市场的历史资金数据对于制定投资策略和做出明智的决策至关重要 这些数据包含着股票的交易量 资金流向 持股比例等关键指标 能够为投资者提供有价值的参考和分析依据 通过利用 Selenium 模拟浏览器
  • Debug-CDK编译

    问题描述 make No rule to make target xxx c needed by Obj xxx o Stop 解决方法 删掉obj文件夹 重新编译
  • 【网络基础】通俗易懂的了解HTTPS的整体过程

    文章目录 前言 HTTP 各个版本 结构 请求 请求行 请求头 请求体 响应 响应行 响应头 响应体 HTTPS 对称加密 非对称加密 对称和非对称结合加密 CA证书中级大发 证书 对称和非对称结合加密 证书关系链 拓展知识 证书的合法性验
  • STM32的常规芯片容量大小以及 大、小容量STM32芯片之间的差别?

    本文主要讨论STM32的常规芯片容量大小以及 STM32芯片大 小容量之间的差别 STM32大容量芯片是包括高达512K字节的闪存和64K字节的SRAM的芯片为大容量 STM32小容量芯片具体容量见下表 STM32F103xC STM32F
  • nginx+tomcat集群+https

    nginx tomcat集群 一 nginx安装 1 安装nginx需要的依赖包 yum y install gcc zlib zlib devel pcre devel openssl openssl devel 2 下载nginx安装包
  • (附源码)ssm考试题库管理系统 毕业设计 069043

    SSM考试题库管理系统 摘 要 随着计算机办公自动化程度的不断提高 开发各种数据库管理应用软件用于各种工作中能有效地提高工作效率 节省时间 能使学校的教学工作上一个新的台阶 传统的人工命题形成试卷 往往会出现大量的重复劳动 并且形成的试卷因
  • FTP局域网内文件共享

    FTP局域网内文件共享 由于最近公司电脑主机不让插U盘拷贝数据 所以导致在打包软件进行上机测试的时候需要使用聊天软件来进行传输 相对比较麻烦 所以决定使用FTP在局域网内来进行文件的共享 记录一下 一起学习吧 操作步骤目录 共享文件夹设置
  • c++ 内存管理一:初识内存分配工具

    文章目录 前言 1 new 和 delete 2 new 和delete 3 operator new 4 placement new 5 malloc和free 6 allocator 前言 侯捷 c 内存管理学习总结笔记 在C 中 有几
  • win服务器文件复制命令,用命令形式从Windows系统拷贝文件到Linux

    1 将本机文件复制到远程服务器上 scp home administrator news txt root 192 168 6 129 etc squid home administrator 本地文件的绝对路径 news txt 要复制到
  • 452. 用最少数量的箭引爆气球

    452 用最少数量的箭引爆气球 在二维空间中有许多球形的气球 对于每个气球 提供的输入是水平方向上 气球直径的开始和结束坐标 由于它是水平的 所以纵坐标并不重要 因此只要知道开始和结束的横坐标就足够了 开始坐标总是小于结束坐标 一支弓箭可以
  • 自动控制原理实验二 二阶系统阶跃响应

    实验源码已经上传CSDN了 需要的可直接下载 链接 https download csdn net download weixin 53129688 87694703 实验内容 其中 z 和wn对系统的动态品质有决定的影响 z为阻尼比 由于
  • 电子书 杜春雷 ARM体系结构与编程

    https pan baidu com s 1AYpTxklTRXCpqGV6hD3UzQ 提取码 j7ku
  • IO流概念与open函数操作

    IO流 input output stream 存储设备 磁盘 rom 能永久保存 读取写入速度慢 内存 ram 读取速度快 不能永久保存 断电就没了 贵 狭义 CPU运算 暂时写入内存 没读满就不存进去 见file 再存入磁盘保存 广义
  • STM32的RTC使用

    STM32的RTC使用 初始化RTC 设置时间保存时间 获取实时时间 RTC后备区另类使用 初始化RTC define RTC SET CONFIG FLAG 0x6066 lt RTC设置完成标志 判断是否第一次配置 if HAL RTC