Перейти к содержанию
    

STM32F2: RTC проблемы с датой

В других контроллерах (stm32f4 к примеру) дата меняется в 00:00:00 время

В STM32F2 наблюдаю другую картину: дата может измениться в 00:00:07 время или не изменяться вообще.

 

Кто то сталкивался с такой проблемой? куда капать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В других контроллерах (stm32f4 к примеру) дата меняется в 00:00:00 время

В STM32F2 наблюдаю другую картину: дата может измениться в 00:00:07 время или не изменяться вообще.

 

Кто то сталкивался с такой проблемой? куда капать?

 

 

У меня такая же проблема. Есть ли решение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто то сталкивался с такой проблемой? куда капать?

Ни на кого не надо капать. :)

 

У меня такая же проблема. Есть ли решение?

Забить на эти регистры, разрешить секундные прерывания и по ним инкрементировать счётчик в памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня такая же проблема. Есть ли решение?

К сожалению, уже не помню, как решил данную проблему.

Кажется, было связано с чтением регистра с датой: толи необходимо читать его после каждого чтения регистра времени (именно после него) толи что то такое.

 

Ни на кого не надо капать. :)

 

 

Забить на эти регистры, разрешить секундные прерывания и по ним инкрементировать счётчик в памяти.

ага и дату самому считать и календарь весь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ага и дату самому считать и календарь весь

Да. А это что, сложно??? :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В других контроллерах (stm32f4 к примеру) дата меняется в 00:00:00 время

В STM32F2 наблюдаю другую картину: дата может измениться в 00:00:07 время или не изменяться вообще.

 

Кто то сталкивался с такой проблемой? куда капать?

 

Для L серии есть вот такое:

Get the RTC_TR register, reading RTC_TR locks the values in the higher-order calendar shadow registers until RTC_DR is read.

 

т.е. нужно прочитать TR и потом DR иначе значение даты обновляться не будет пока его не считают. Может и тут такое же?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забить на эти регистры, разрешить секундные прерывания и по ним инкрементировать счётчик в памяти.

К сожалению, когда питание выключили, RTC будет тикать, а инкрементировать некому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению, когда питание выключили, RTC будет тикать, а инкрементировать некому.

При включении питания считать RTC, преобразовать в секунды и начать тикать.

С часами на основе счётчика секунд, работать много проще чем с набором полей времени/даты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С часами на основе счётчика секунд, работать много проще чем с набором полей времени/даты.

+1

даже стандартная Cи функция time() возвращает секунды.

преобразовывать каждый раз полный календарь в секунды - лишние накладные расходы, никому не нужные.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

. . .

Забить на эти регистры, разрешить секундные прерывания и по ним инкрементировать счётчик в памяти.

++++ (!) ++++

 

Нормальные узлы RTC имеют 2 режима - обычный календарный (человеческий) и UTC счетчик.

Еси есть такая возможность - переведите узел в режим 32-разрядного счетчика UTC

и пользуйтесь удобным и стандартым методом работы в временем localtime(), gmtime(), strftime() etc.

Заодно "автоматически" решается гемор с переходом или "непереходом" зима-лето, если ОНО требуется и таймозонами.

---

Если аппаратного UTC нет -

. . .

Забить на эти регистры, разрешить секундные прерывания и по ним инкрементировать счётчик в памяти.

:)

И будет Вам счастье ....

 

Проверка "прохода" через час:

if( (UTC_Counter % 3600) == 0 ) . . . . .

 

Проверка "прохода" через 5 минут:

if( (UTC_Counter % 300) == 0 ) . . . . .

 

Печать часы-минуты-секунды в массив ms

    strftime( ms, 20, "%H-%M-%S", &ttm_LOC );

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В STM32F2 наблюдаю другую картину: дата может измениться в 00:00:07 время или не изменяться вообще.

Там в мануале написали целую страницу про то, как правильно читать регистры календаря. Наверняка что-то там нарушаете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нормальные узлы RTC имеют 2 режима - обычный календарный (человеческий) и UTC счетчик.

Еси есть такая возможность - переведите узел в режим 32-разрядного счетчика UTC

Вы мне-то это зачем советуете?? Я всегда именно так и делаю. Про прерывания написал - как общий случай, когда режима счётчика нет.

 

Там в мануале написали целую страницу про то, как правильно читать регистры календаря. Наверняка что-то там нарушаете.

99.9% что именно так и обстоит дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы мне-то это зачем советуете?? Я всегда именно так и делаю. Про прерывания написал - как общий случай, когда режима счётчика нет.

. . .

Вас-с-с-с я цитирую и плюсую, а советую ТС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да да и будильник из спящего режима на таймере делать?

в общем в моем случае проблема давно решена. как озвучили выше "необходимо сначала считывать регистр времени затем даты".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

99.9% что именно так и обстоит дело.

 

В сообщении #6 я же про это ТС-у написал. Что то проигнорировал он )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...