STM32F051 HAL_RTC_SetDate не устанавливает год правильно - PullRequest
0 голосов
/ 19 сентября 2018

Поэтому я использую приложение для смартфона, чтобы установить время и дату RTC на микроконтроллере.RTC работает на LSE.

Форматирование строки, которую я отправил на микроконтроллер, правильное.Я могу быть уверен в этом, когда я устанавливаю соответствующие переменные в «Watch 1».Я использую Keil uVision 5.

/** 
  * @brief  RTC Date structure definition  
  */
typedef struct
{
  uint8_t WeekDay;  /*!< Specifies the RTC Date WeekDay.
                         This parameter can be a value of @ref RTC_WeekDay_Definitions */

  uint8_t Month;    /*!< Specifies the RTC Date Month (in BCD format).
                         This parameter can be a value of @ref RTC_Month_Date_Definitions */

  uint8_t Date;     /*!< Specifies the RTC Date.
                         This parameter must be a number between Min_Data = 1 and Max_Data = 31 */

  uint8_t Year;     /*!< Specifies the RTC Date Year.
                         This parameter must be a number between Min_Data = 0 and Max_Data = 99 */

}RTC_DateTypeDef;

Так что моя команда, которую я отправил, на самом деле устанавливает DD / MM / YY и, конечно, время, но у меня нет проблем со временем.

После его установки и последующего вызова HAL_RTC_GetDate и HAL_RTC_GetTime все верно, кроме атрибута Year.

Моя команда, которую я отправляю, всегда будет 2018 годом, однако функция GetTime всегда будет возвращать более высокое и случайное значениенапример, 24, 22, 21 и 19. Иногда, после отправки нескольких раз одной и той же команды, но с разными минутами и секундами, год возвращается к 18 ...

В чем может быть проблема?Кроме того, я должен установить параметр WeekDay, так как я устанавливаю только день, месяц и год.

Спасибо!

* У меня есть функция, которая поможет мне взять последние две цифры года2018, который я отправляю, и он передает значение 18 в микроконтроллер.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Итак, я решил попробовать установить параметр WeekDay, сначала его жестко запрограммировав.Поэтому я отправил точно такую ​​же команду установки даты и времени с датой в формате ДД / ММ / ГГ на микроконтроллер, и мои значения для считывания верны до сих пор.Я перешел по этой ссылке, предоставленной A.Rech:

HAL_SetDate устанавливает год в неверное значение

Даже при повторной отправке одной и той же команды с тем же DD / MM /Да, но с другим временем мои значения для обратного чтения из HAL_RTC_GetDate () пока верны!Я надеюсь, что это будет так, а не просто совпадение.

Спасибо!

* Просто добавлю.До жесткого кодирования параметра WeekDay.Всякий раз, когда я отправляю команду с DD / MM / YY на микроконтроллер несколько раз с разными значениями времени, установленными, в то время как DD / MM / YY одинаковы.Значение обратного считывания параметра WeekDay будет случайным числом, в моем случае однозначное число не больше, чем значение 7.

0 голосов
/ 17 января 2019

У меня была такая же проблема.Я обнаружил, что проблема не в установке WeekDay (при создании struct RTC_DateTypeDef поле WeekDay получает случайное значение). Значение WeekDay должно быть установлено в диапазоне от 0 до 7 .

См. Мой полный ответ на аналогичный вопрос с объяснением: https://stackoverflow.com/a/54236587/10927863

0 голосов
/ 19 сентября 2018

Посмотрите на определение вашей структуры.Год равен только uint8_t, поэтому максимум равен 255. Если вы прочитаете комментарий за этим определением, год станет равным от 0 до 99.

Лучше всего записать в RTC только 18 вместо 2018 *.1003 *

...