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

 
 
 
Closed TopicStart new topic
> STM32F401 RTC Read RTC_TR, При чтении значения времени, регистр содержит "старое" значени
Integro
сообщение Sep 5 2014, 13:07
Сообщение #1


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

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Всем привет,
Следующая проблема, запустил RTC от HSI, вычитываю в цикле раз в секунду значение времени (вывожу в консоль) и получаю повторяющееся значение часов\минут\секунд (регистр RTC_TR), регистр TR меняет значение через произвольное время от 5 сек до 6 мин.
ПРИЧЕМ! сам RTC тикает, тоесть как только значение читается корректно оно соответствует источнику синхронизации.
НО, использую IAR, унего есть мемори окно с апдейпом регистров раз в секунду, если включить этот апдейт, значения вычитываются корректно и при этом в прошиве они также начинают корректно вычитыватся (в консоли).
И, регистр SubSeconds читается всегда корректно!

Код
RTC: 2013/03/20 08:49:06.994
RTC: 2013/03/20 08:49:06.982
RTC: 2013/03/20 08:49:06.015
RTC: 2013/03/20 08:49:06.994
RTC: 2013/03/20 08:49:10.993
RTC: 2013/03/20 08:49:10.900


От LSI аналогично только тикает не стабильно.
Оптимизация отключена.
Проц работает от 1.8В, 84Mhz, APB1 шина на 42MHz.
Либы от куба.


Наступал кто на подобные грабли?

UPD: Парни, локализовал проблему. Проблема с либами Cude, на старых добрых StdPeriph_Driver все работает. интересный глюк, после исследование отпишу о деталях.
P.S. Не спешите использовать куб!!! Сырой он еще))) Это не первый баг, и не первый потраченный день на поиск бага).

UPD2: В общем проблема была в использовании регистра SSR(SubSeconds), после его чтения залачиваются регистры календаря до тех пор пока не будет произведено чтение регистра DR (Date). Тo есть если в старых добрых StdPeriph_Driver для чтения SubSeconds использовалась отдельная функция(RTC_GetSubSecond) то здесь они ее объединили с HAL_RTC_GetTime поэтому после использования HAL_RTC_GetTime вызываем HAL_RTC_GetDate даже если в этом нет необходимости.
Так кстати, английский по белому написано в примечании к использованию функции:

Код
  * @note   Call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values
  *         in the higher-order calendar shadow registers.


Сообщение отредактировал Integro - Sep 5 2014, 15:49
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:30
Рейтинг@Mail.ru


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