stm32f767之RTC

一,RTC简介

 二,IDE配置驱动。

1,使能外部LSE时钟。

 2,选择LSE。

 3,RTC时钟分频。

 

 三,程序使用。

1,初始化。

RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;

RTC_DateTypeDef RtcDate;
RTC_TimeTypeDef RtcTime;

uint8_t time_set = 0;//用户设置时间标记


/* RTC init function */
void MX_RTC_Init(void)
{

  /* USER CODE BEGIN RTC_Init 0 */

  /* USER CODE END RTC_Init 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 RTC_Init 2 */

 //HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0X0000);//取消标记
  if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR0)!=0X5050)//是否第一次配置
  {
	    sTime.Hours = 11;
	    sTime.Minutes = 58;
	    sTime.Seconds = 30;
	    sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
	    sTime.StoreOperation = RTC_STOREOPERATION_RESET;
	    if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
	    {
	      Error_Handler();
	    }
	    sDate.WeekDay = RTC_WEEKDAY_MONDAY;
	    sDate.Month = RTC_MONTH_JANUARY;
	    sDate.Date = 30;
	    sDate.Year = 23;

	    if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
	    {
	      Error_Handler();
	    }

	    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0X5050);//标记已经初始化过了
  }


  /* USER CODE END RTC_Init 2 */

}

2,读取程序

 HAL_RTC_GetTime(&hrtc, &RtcTime,  RTC_FORMAT_BIN);//读出时间值
 HAL_RTC_GetDate(&hrtc, &RtcDate,  RTC_FORMAT_BIN);//一定要先读时间后读日期
printf(" RTC实时时钟测试\r\n");
printf(" 实时时间:%04d-%02d-%02d  %02d:%02d:%02d  \r\n",2000+RtcDate.Year,
	         		   RtcDate.Month, RtcDate.Date,RtcTime.Hours, RtcTime.Minutes, RtcTime.Seconds);//显示日期时间

四,总结。

  写入和读取函数,有两种格式,RTC_FORMAT_BIN和RTC_FORMAT_BCD,即二进制和BCD码格式。这里后用RTC_FORMAT_BIN。

猜你喜欢

转载自blog.csdn.net/m0_38012497/article/details/128800593