rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба День добрый. Так получилось, что в одном проекте связался с HAL. Сделал часы и запись в бэкап регистры. На Vbat установлена батарейка 2032. Пока есть питание - часы идут, бэкап регистры пишутся и читаются. Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. До этого делал 2 проекта с часами, но не на HAL, все работало. Никто не сталкивался с похожими сложностями? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
charkin 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба День добрый. Так получилось, что в одном проекте связался с HAL. Сделал часы и запись в бэкап регистры. На Vbat установлена батарейка 2032. Пока есть питание - часы идут, бэкап регистры пишутся и читаются. Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. До этого делал 2 проекта с часами, но не на HAL, все работало. Никто не сталкивался с похожими сложностями? Инит модуля RTC можете показать? Тамперы не включены случаем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Инит модуля RTC можете показать? Тамперы не включены случаем? Инит стандартный, приду на работу выложу, тампер выключен (бит). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба … До этого делал 2 проекта с часами, но не на HAL, все работало. Ну а сравнить под отладчиком, что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
charkin 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Ну а сравнить под отладчиком, что не так? Повторяю, все гладко работает, пока не выключишь питание, биты в регистрах посмотрел, все похоже на правду. Такое впечатление, что HAL при старте что-то фиксит, либо при выключении питания что-то происходит. Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо. Батарейку проверил в первую очередь, даже пробовал другую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Повторяю, все гладко работает, пока не выключишь питание, биты в регистрах посмотрел, все похоже на правду. Такое впечатление, что 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." какой-то из ваших случаев. Напряжение от исправной (да-да проверили) батарейки до вывода доходит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Подразумевалось, что если без "хала" работает, то различия в регистрах быть должны. "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." какой-то из ваших случаев. Напряжение от исправной (да-да проверили) батарейки до вывода доходит? За BDCR смотрел в отладчике. На выводе смотрел осциллографом, напряжение доходит. В референс мануале пишут про стронгли рекомендед диод на Vbat при определенных условиях, но батарейка под них вроде не попадает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 81 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении. С работы выложу код инициализации, там нет ничего, что может сбрасывать домен бэкапа, к тому же бэкап регистры (в отладчике) обнулены уже при самом старте, еще до функции инициализации RTC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex2103 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении. 99% так и есть. rat, в эти бекап регистры запишите что-то осознанное при инициализации и при старте проверяйте. Если там мусор - то повторная инициализация. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба 99% так и есть. rat, в эти бекап регистры запишите что-то осознанное при инициализации и при старте проверяйте. Если там мусор - то повторная инициализация. Записываю осознанное, при старте после выключения питания там всегда только нули. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serglg 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 (изменено) · Жалоба странно. У меня стандартная инициализация HAL-ом STM32L476. Если есть батарейка - ничего не теряется. Хотя год назад в старой версии STM32Cube_FW_L4 было такое - при инициализации RTC они сбрасывали все часы в нуль. Приходилось вручную поправлять (комментировать это место). Но потом и они поправили. Вот как было: 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(); } } Изменено 22 ноября, 2017 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 22 ноября, 2017 Опубликовано 22 ноября, 2017 · Жалоба странно. У меня стандартная инициализация HAL-ом STM32L476. Если есть батарейка - ничего не теряется. Хотя год назад в старой версии STM32Cube_FW_L4 было такое - при инициализации RTC они сбрасывали все часы в нуль. Приходилось вручную поправлять (комментировать это место). Но потом и они поправили. У меня STM32F103, там другие часы, вернее просто счетчик, не как в 4 семействе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rat 0 23 ноября, 2017 Опубликовано 23 ноября, 2017 · Жалоба Код инициализации /* RTC init function */ static void MX_RTC_Init(void) { /**Initialize RTC Only */ hrtc.Instance = RTC; hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; hrtc.Init.OutPut = RTC_OUTPUTSOURCE_CALIBCLOCK; if (HAL_RTC_Init(&hrtc) != HAL_OK) { Error_Handler(); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться