Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RTC и BKP регистры STM32F103
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
rat
День добрый. Так получилось, что в одном проекте связался с HAL. Сделал часы и запись в бэкап регистры. На Vbat установлена батарейка 2032. Пока есть питание - часы идут, бэкап регистры пишутся и читаются. Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. До этого делал 2 проекта с часами, но не на HAL, все работало. Никто не сталкивался с похожими сложностями?
charkin
Цитата(rat @ Nov 22 2017, 12:10) *
День добрый. Так получилось, что в одном проекте связался с HAL. Сделал часы и запись в бэкап регистры. На Vbat установлена батарейка 2032. Пока есть питание - часы идут, бэкап регистры пишутся и читаются. Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. До этого делал 2 проекта с часами, но не на HAL, все работало. Никто не сталкивался с похожими сложностями?



Инит модуля RTC можете показать? Тамперы не включены случаем?
rat
Цитата(charkin @ Nov 22 2017, 17:40) *
Инит модуля RTC можете показать? Тамперы не включены случаем?


Инит стандартный, приду на работу выложу, тампер выключен (бит).
Obam
Цитата(rat @ Nov 22 2017, 13:10) *
… До этого делал 2 проекта с часами, но не на HAL, все работало.

Ну а сравнить под отладчиком, что не так?
charkin
Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо.
rat
Цитата(Obam @ Nov 22 2017, 18:30) *
Ну а сравнить под отладчиком, что не так?


Повторяю, все гладко работает, пока не выключишь питание, биты в регистрах посмотрел, все похоже на правду. Такое впечатление, что HAL при старте что-то фиксит, либо при выключении питания что-то происходит.

Цитата(charkin @ Nov 22 2017, 18:46) *
Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо.


Батарейку проверил в первую очередь, даже пробовал другую.
Obam
Цитата(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." какой-то из ваших случаев.
Напряжение от исправной (да-да проверили) батарейки до вывода доходит?
rat
Цитата(Obam @ Nov 22 2017, 19:56) *
Подразумевалось, что если без "хала" работает, то различия в регистрах быть должны.


"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
Цитата(rat @ Nov 22 2017, 16:10) *
Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются.

Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении.
rat
Цитата(HardEgor @ Nov 22 2017, 20:55) *
Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении.

С работы выложу код инициализации, там нет ничего, что может сбрасывать домен бэкапа, к тому же бэкап регистры (в отладчике) обнулены уже при самом старте, еще до функции инициализации RTC.
alex2103
Цитата(HardEgor @ Nov 22 2017, 15:55) *
Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении.

99% так и есть.

rat, в эти бекап регистры запишите что-то осознанное при инициализации и при старте проверяйте. Если там мусор - то повторная инициализация.
rat
Цитата(alex2103 @ Nov 22 2017, 21:40) *
99% так и есть.

rat, в эти бекап регистры запишите что-то осознанное при инициализации и при старте проверяйте. Если там мусор - то повторная инициализация.

Записываю осознанное, при старте после выключения питания там всегда только нули.
serglg
странно.
У меня стандартная инициализация 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();
}

}
rat
Цитата(serglg @ Nov 22 2017, 22:31) *
странно.
У меня стандартная инициализация HAL-ом STM32L476.
Если есть батарейка - ничего не теряется.
Хотя год назад в старой версии STM32Cube_FW_L4 было такое - при инициализации RTC они сбрасывали все часы в нуль.
Приходилось вручную поправлять (комментировать это место). Но потом и они поправили.


У меня STM32F103, там другие часы, вернее просто счетчик, не как в 4 семействе.
rat
Код инициализации

/* 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();
}

}
rat
Проблема решилась. Дело было в разных источниках питания VDD и VDDA, при выключении они падали с разной скоростью, у проца сносило крышу и он не успевал переключиться на батарею. Решение описано https://electronix.ru/forum/index.php?showtopic=134920. Тема закрыта, всем откликнувшимся спасибо.
batson
у меня в stm32f100 Vss и Vssa, Vdd и Vdda объединены а все равно сбрасывает BKP регистры
что самое интересное на конкретно этом кристалле раньше работало, спустя долгое время перестало
smk
Цитата(rat @ Nov 22 2017, 17:09) *
Записываю осознанное, при старте после выключения питания там всегда только нули.

Либо снималось питание либо нули прописывались. Ищите что-то из этого. Чудес не бывает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.