AnsweredAssumed Answered

RTC

Question asked by schuch.lucas on Jul 21, 2015
Latest reply on Apr 7, 2017 by Zoyhar
Hi,

I am using Cube MX to generate the RTC code.

It is working perfectly fine, the time is counted correctly. But every time I turn off the device, the time and date are set back to 0.
I found the problem in the Init function. Every time the RTC is initialized, the time and date are set to zero again.

I solved the problem just by commenting those lines, but I am wondering why cube generates such code! Once that the code is not supposed to be edited, every time I generate a new version I must remember to go there and comment those lines. It is weird. Am I doing something wrong?

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


  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;
  RTC_AlarmTypeDef sAlarm;


    /**Initialize RTC and set the Time and Date 
    */
  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;
  HAL_RTC_Init(&hrtc);

  // Manually commented     
  //sTime.Hours = 0;
  //sTime.Minutes = 0;
  //sTime.Seconds = 0;
  //sTime.SubSeconds = 0;
  sTime.TimeFormat = RTC_HOURFORMAT12_AM;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);


  // Manually commented
  //sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  //sDate.Month = RTC_MONTH_JANUARY;
  //sDate.Date = 1;
  //sDate.Year = 0;
  HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);


    /**Enable the Alarm A 
    */
  sAlarm.AlarmTime.Hours = 0;
  sAlarm.AlarmTime.Minutes = 0;
  sAlarm.AlarmTime.Seconds = 0;
  sAlarm.AlarmTime.SubSeconds = 0;
  sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
  sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 1;
  sAlarm.Alarm = RTC_ALARM_A;
  HAL_RTC_SetAlarm(&hrtc, &sAlarm, FORMAT_BCD);


}

Outcomes