当前位置: 首页 > article >正文

STM32 RTC亚秒

rtc时钟功能实现:rtc模块在stm32内部,由电池或者主电源供电。如下图,需注意实现时仅需设置一次初始化。
在这里插入图片描述
1、stm32cubemx 代码生成界面设置,仅需开启时钟源和激活日历功能。
在这里插入图片描述
2、生成的代码,需要对时钟进行初始化,仅需一次初始化即可。因此使用RTC_BKP_DR0保存设置状态,等于设置值时就说明设置过了不用再设置:

{

  /* USER CODE BEGIN RTC_Init 0 */

  /* USER CODE END RTC_Init 0 */

  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};

  /* USER CODE BEGIN RTC_Init 1 */

  /* USER CODE END RTC_Init 1 */
  /** Initialize RTC Only
  */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN Check_RTC_BKUP */
  /* USER CODE END Check_RTC_BKUP */

  /** Initialize RTC and set the Time and Date
  */
  /* USER CODE BEGIN RTC_Init 2 */
	if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x50)    
	{
		 rtc_set_time(19, 17, 56, RTC_HOURFORMAT12_PM);   /* 设置时间, 根据实际时间修改 */
		 rtc_set_date(25, 2, 9, 7);                     /* 设置日期 */
		 HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR0,0x50);
	}
  /* USER CODE END RTC_Init 2 */

}

3、亚秒的设置,在RTC_TimeTypeDef结构体中有亚秒的属性SubSeconds读出即可,默认状态下不读取,因项目要求5ms记录一次时间所以使用到该属性。
在这里插入图片描述4、函数调用:
在这里插入图片描述

void rtc_get_time(uint8_t *hour, uint8_t *min, uint8_t *sec,uint8_t *subsec, uint8_t *ampm)
{
    
    RTC_TimeTypeDef rtc_time_handle;
    HAL_RTC_GetTime(&hrtc, &rtc_time_handle, RTC_FORMAT_BIN);
    *hour = rtc_time_handle.Hours;
    *min = rtc_time_handle.Minutes;
    *sec = rtc_time_handle.Seconds;
	  *subsec = rtc_time_handle.SubSeconds * 0.39;
    *ampm = rtc_time_handle.TimeFormat;
}

最后的结果:
在这里插入图片描述


http://www.kler.cn/a/540555.html

相关文章:

  • Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)
  • DeepSeek训练成本与技术揭秘
  • 计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习
  • 数据源和 sqlSessionFactory 配置
  • 大模型推理——MLA实现方案
  • 01单片机上电后没有正常运行怎么办
  • 【高级架构师】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock
  • Python——批量图片转PDF(GUI版本)
  • 2.10寒假作业
  • 反射:获取类中的成分、并对其进行操作
  • SpringCloud - Sentinel服务保护
  • 矩阵NFC碰一碰发视频的源码技术开发攻略,支持OEM
  • 【数据】Cassandra(列存储)
  • 小红书爬虫: 获取所需数据
  • JVM栈帧中|局部变量表、操作数栈、动态链接各自的任务是什么?
  • Java_多线程
  • 非华为电脑制作一碰传NFC贴纸
  • AutoGen实战应用
  • DeepSeek--教师备课效能100%
  • 元数据、数据元、数据元素、数据项 和 主数据的概念
  • 前端学习之Flex布局
  • 【shellbash进阶系列】(四)SHELL脚本--变量(基础)
  • 用Python批量去除PDF文件的密码
  • AOSP 编译配置:深入解析 Android.mk 和 Android.bp
  • timescaladb时序数据库高可用docker镜像使用
  • 如何用WPF制作简单的加密解密