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

 
 
> Принцип работы RTC в STM32F107
Auratos
сообщение Feb 28 2018, 09:48
Сообщение #1


Участник
*

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



Добрый день. Имеется на руках контроллер серии STM32F107xx. Пользуюсь активно таймером реального времени. И вот, собственно, возник вопрос: а какой у этого таймера диапазон измерения времени? Т.к. там 32-битный секундный счетчик, то максимум он сможет отсчитать ~136 лет. Отсчет начинается, как я понял, с 1900 года, т.е. до 2036 года. А что будет после его переполнения, т.е. после 2036 года? Можно ли самому подвинуть точку отсчета? Или там совсем все устроено по-другому? Объясните, пожалуйста
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
viakon
сообщение Feb 28 2018, 10:28
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Цитата(Auratos @ Feb 28 2018, 14:48) *
Добрый день. Имеется на руках контроллер серии STM32F107xx. Пользуюсь активно таймером реального времени. И вот, собственно, возник вопрос: а какой у этого таймера диапазон измерения времени? Т.к. там 32-битный секундный счетчик, то максимум он сможет отсчитать ~136 лет. Отсчет начинается, как я понял, с 1900 года, т.е. до 2036 года. А что будет после его переполнения, т.е. после 2036 года? Можно ли самому подвинуть точку отсчета? Или там совсем все устроено по-другому? Объясните, пожалуйста

Откуда, зададите оттуда и будет. Главное правильно преобразовать при синхронизации часов.
Go to the top of the page
 
+Quote Post
Auratos
сообщение Feb 28 2018, 10:42
Сообщение #3


Участник
*

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



Цитата(viakon @ Feb 28 2018, 10:28) *
Откуда, зададите оттуда и будет. Главное правильно преобразовать при синхронизации часов.

Можно, пожалуйста, поподробнее? Просто я пользуюсь библиотечной функцией при установке времени и даты

Код
void Set_Time(struct tm *t)
{
  uint32_t CounterValue = (uint32_t)mktime(t);
  save_Time(CounterValue;
}

void save_Time(uint32_t tmr) {
  RTC_WaitForLastTask();
  RTC_SetCounter(tmr);
  RTC_WaitForLastTask();
}


Так вот, функция mktime не воспринимает дату позже февраля 2036 года (найдено опытным путем вплоть до минуты и секунды), т.к. при инкрементации новой секунды происходит переполнение 32-битного CounterValue. Или я неправильно Вас понял? Как выставить дату больше указанной?

Сообщение отредактировал Auratos - Feb 28 2018, 10:47
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 16:26
Рейтинг@Mail.ru


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