Jump to content
    

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

 

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

В других контроллерах (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 иначе значение даты обновляться не будет пока его не считают. Может и тут такое же?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

+1

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

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

 

Share this post


Link to post
Share on other sites

. . .

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

++++ (!) ++++

 

Нормальные узлы 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 );

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

. . .

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...