|
RTC и BKP регистры STM32F103, на HAL |
|
|
|
Nov 22 2017, 10:40
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 10-01-16
Пользователь №: 89 977

|
Цитата(rat @ Nov 22 2017, 12:10)  День добрый. Так получилось, что в одном проекте связался с HAL. Сделал часы и запись в бэкап регистры. На Vbat установлена батарейка 2032. Пока есть питание - часы идут, бэкап регистры пишутся и читаются. Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. До этого делал 2 проекта с часами, но не на HAL, все работало. Никто не сталкивался с похожими сложностями? Инит модуля RTC можете показать? Тамперы не включены случаем?
|
|
|
|
|
Nov 22 2017, 11:46
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 10-01-16
Пользователь №: 89 977

|
Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо.
|
|
|
|
|
Nov 22 2017, 12:20
|

Местный
  
Группа: Свой
Сообщений: 497
Регистрация: 9-06-05
Из: Новосибирск
Пользователь №: 5 852

|
Цитата(Obam @ Nov 22 2017, 18:30)  Ну а сравнить под отладчиком, что не так? Повторяю, все гладко работает, пока не выключишь питание, биты в регистрах посмотрел, все похоже на правду. Такое впечатление, что HAL при старте что-то фиксит, либо при выключении питания что-то происходит. Цитата(charkin @ Nov 22 2017, 18:46)  Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо. Батарейку проверил в первую очередь, даже пробовал другую.
|
|
|
|
|
Nov 22 2017, 12:56
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата(rat @ Nov 22 2017, 16:20)  Повторяю, все гладко работает, пока не выключишь питание, биты в регистрах посмотрел, все похоже на правду. Такое впечатление, что HAL при старте что-то фиксит, либо при выключении питания что-то происходит. Подразумевалось, что если без "хала" работает, то различия в регистрах быть должны. Цитата Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. "A backup domain reset is generated when one of the following events occurs: 1. Software reset, triggered by setting the BDRST bit in the Backup domain control register (RCC_BDCR). 2. VDD or VBAT power on, if both supplies have previously been powered off." какой-то из ваших случаев. Напряжение от исправной (да-да проверили) батарейки до вывода доходит?
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Nov 22 2017, 14:40
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945

|
Цитата(HardEgor @ Nov 22 2017, 15:55)  Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении. 99% так и есть. rat, в эти бекап регистры запишите что-то осознанное при инициализации и при старте проверяйте. Если там мусор - то повторная инициализация.
|
|
|
|
|
Nov 22 2017, 15:31
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 19-07-16
Пользователь №: 92 603

|
странно. У меня стандартная инициализация HAL-ом STM32L476. Если есть батарейка - ничего не теряется. Хотя год назад в старой версии STM32Cube_FW_L4 было такое - при инициализации RTC они сбрасывали все часы в нуль. Приходилось вручную поправлять (комментировать это место). Но потом и они поправили. Вот как было: CODE void MX_RTC_Init(void) { RTC_TimeTypeDef sTime; RTC_DateTypeDef sDate;
/**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_WAKEUP; hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; if (HAL_RTC_Init(&hrtc) != HAL_OK) { Error_Handler(); }
/**Initialize RTC and set the Time and Date sTime.Hours = 0x0; sTime.Minutes = 0x0; sTime.Seconds = 0x0; sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sTime.StoreOperation = RTC_STOREOPERATION_RESET; if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) { Error_Handler(); }
sDate.WeekDay = RTC_WEEKDAY_MONDAY; sDate.Month = RTC_MONTH_JANUARY; sDate.Date = 0x1; sDate.Year = 0x0;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) { Error_Handler(); } */
/**Enable the WakeUp */ if (HAL_RTCEx_SetWakeUpTimer(&hrtc, 0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK) { Error_Handler(); }
}
Сообщение отредактировал IgorKossak - Nov 22 2017, 18:42
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|