Всем привет,
Следующая проблема, запустил 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