STM32 RTC亚秒

rtc时钟功能实现:rtc模块在stm32内部,由电池或者主电源供电。如下图,需注意实现时仅需设置一次初始化。

1、stm32cubemx 代码生成界面设置,仅需开启时钟源和激活日历功能。

2、生成的代码,需要对时钟进行初始化,仅需一次初始化即可。因此使用RTC_BKP_DR0保存设置状态,等于设置值时就说明设置过了不用再设置:

void 复制代码
{

  /* 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;
}

最后的结果:

相关推荐
DIY机器人工房4 分钟前
简单理解:电源转换四大类型(AC/DC、DC/AC、DC/DC、boost、buck、LDO、AC/AC之间分别是什么关系?)
嵌入式硬件·boost·bms·buck·ldo·diy机器人工房·电源转换
就是蠢啊22 分钟前
51单片机——串口通信(二)
嵌入式硬件·mongodb·51单片机
挽天java30 分钟前
Arduino/EIDE/Platform IO/Linux/MRS/Keil/STM32Cubemx配置
linux·运维·stm32
DIY机器人工房31 分钟前
(十二)嵌入式面试题收集:15道
单片机·嵌入式硬件·diy机器人工房
LS_learner36 分钟前
PCB更新原理图变更出现大量Remove问题
嵌入式硬件
仰望星空的凡人1 小时前
基于RH850-F1x系列的瑞萨MCU选型指南
单片机·嵌入式硬件·rh850·renesas
卡提西亚1 小时前
(10)普中A2 51单片机DS1302实时时钟
单片机·嵌入式硬件·51单片机
@good_good_study1 小时前
STM32 TIM通道捕获配置函数及实验
stm32·单片机
TeleostNaCl1 小时前
Docker | 如何限制容器的 CPU/内存/磁盘IO 的资源利用以降低性能消耗
运维·经验分享·嵌入式硬件·docker·容器·智能路由器
偶像你挑的噻10 小时前
15-Linux驱动开发-PWM子系统
linux·驱动开发·stm32·嵌入式硬件