реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> RTC и BKP регистры STM32F103, на HAL
rat
сообщение Nov 22 2017, 09:10
Сообщение #1


Местный
***

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



День добрый. Так получилось, что в одном проекте связался с HAL. Сделал часы и запись в бэкап регистры. На Vbat установлена батарейка 2032. Пока есть питание - часы идут, бэкап регистры пишутся и читаются. Стоит только выключить основное питание (батарейка к Vbat подключена) и часы, и бэкап регистры обнуляются. До этого делал 2 проекта с часами, но не на HAL, все работало. Никто не сталкивался с похожими сложностями?
Go to the top of the page
 
+Quote Post
charkin
сообщение Nov 22 2017, 10:40
Сообщение #2


Участник
*

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



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



Инит модуля RTC можете показать? Тамперы не включены случаем?
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 22 2017, 11:22
Сообщение #3


Местный
***

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



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


Инит стандартный, приду на работу выложу, тампер выключен (бит).
Go to the top of the page
 
+Quote Post
Obam
сообщение Nov 22 2017, 11:30
Сообщение #4


Знающий
****

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



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

Ну а сравнить под отладчиком, что не так?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
charkin
сообщение Nov 22 2017, 11:46
Сообщение #5


Участник
*

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



Вспомнил, была у меня похожая проблема - последнее, что проверил, это напряжение на батарейке. Оказалось 0,5 В - заменил и все стало хорошо.
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 22 2017, 12:20
Сообщение #6


Местный
***

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



Цитата(Obam @ Nov 22 2017, 18:30) *
Ну а сравнить под отладчиком, что не так?


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

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


Батарейку проверил в первую очередь, даже пробовал другую.
Go to the top of the page
 
+Quote Post
Obam
сообщение Nov 22 2017, 12:56
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 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." какой-то из ваших случаев.
Напряжение от исправной (да-да проверили) батарейки до вывода доходит?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 22 2017, 13:08
Сообщение #8


Местный
***

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



Цитата(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 при определенных условиях, но батарейка под них вроде не попадает.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Nov 22 2017, 13:55
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 161
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



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

Однозначно при включении происходит полная инициализация RTC. А надо 1 раз при первом включении.
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 22 2017, 14:08
Сообщение #10


Местный
***

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



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

С работы выложу код инициализации, там нет ничего, что может сбрасывать домен бэкапа, к тому же бэкап регистры (в отладчике) обнулены уже при самом старте, еще до функции инициализации RTC.
Go to the top of the page
 
+Quote Post
alex2103
сообщение Nov 22 2017, 14:40
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



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

99% так и есть.

rat, в эти бекап регистры запишите что-то осознанное при инициализации и при старте проверяйте. Если там мусор - то повторная инициализация.
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 22 2017, 15:09
Сообщение #12


Местный
***

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



Цитата(alex2103 @ Nov 22 2017, 21:40) *
99% так и есть.

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

Записываю осознанное, при старте после выключения питания там всегда только нули.
Go to the top of the page
 
+Quote Post
serglg
сообщение Nov 22 2017, 15:31
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 143
Регистрация: 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] - для короткого!
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 22 2017, 15:34
Сообщение #14


Местный
***

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



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


У меня STM32F103, там другие часы, вернее просто счетчик, не как в 4 семействе.
Go to the top of the page
 
+Quote Post
rat
сообщение Nov 23 2017, 02:31
Сообщение #15


Местный
***

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



Код инициализации

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

}
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2018 - 07:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.02037 секунд с 7
ELECTRONIX ©2004-2016