Например TDA7294

Форум РадиоКот • Просмотр темы - RTC HAL Не обновляется время.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 19:03:06

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: RTC HAL Не обновляется время.
СообщениеДобавлено: Пт фев 24, 2017 18:41:54 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Всем добрый день
Наигравшись с ручной инициализацией переферии и миганием светодиодами, перешел на изучение HAL. Подключил LCD, научился выводить на него строки.
Теперь пытаюсь запустить RTC.
Столкнулся с двумя проблемами:
1) данные регистров считываются только один раз. Причем, если нажимать ресет, считываются новые данные, тоесть в регистрах счет идет.
2) секунды и минуты считаются не до 59, а до 99.
По первой проблеме чтение интернета ничего не дало, т.к. все выводят данные в отладку. Подобная проблема встречается у некоторых, но решение на форумах не указано.
По второй проблеме все очень туманно. В старых мануалах писалось, что RTC считает только секунды. И необходимо при помощи формул выводить текущее значение. Однако в новых документациях пишется, что STM уже считает как надо.
и сам код.

RTC_TimeTypeDef sTime; - этой строки у меня не было, объявили.

и в цикле опрашиваем:
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BCD);
Hour=sTime.Hours;
Min=sTime.Minutes;
Sec=sTime.Seconds;
sprintf(str, " Time %d:%d:%d",Hour,Min,Sec);
LCD_String(str);
HAL_Delay (2000);
LCD_Clear();


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Пт фев 24, 2017 20:08:01 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 06, 2016 14:26:07
Сообщений: 29
Рейтинг сообщения: 0
1) так и должно быть, RTC не сбросится, пока не переткнете питание, так как он находится в backup domain регистре.
2) RTC имеет 32-разрядный счетный регистр, значение которого увеличивается на 1 (при правильной настройке тактирования) каждую секунду.
Какой у Вас камень? Вероятнее всего что-то не так с фукцией, которая конвертирует 32-битное значение в текущее время. Приложите архив проекта, гляну.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Пт фев 24, 2017 20:20:02 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Код:
RTC_FORMAT_BCD

из документации HAL:
раздел HAL_RTC_GetTime
Function Name
HAL_StatusTypeDef HAL_RTC_GetTime (RTC_HandleTypeDef
* hrtc, RTC_TimeTypeDef * sTime, uint32_t Format)
.....
Format:
Specifies the format of the entered parameters. This
parameter can be one of the following values:
RTC_FORMAT_BIN: Binary data format
RTC_FORMAT_BCD: BCD data format
из просторов:
Цитата:
Двоично-десятичный код (англ. binary-coded decimal), BCD, 8421-BCD — форма записи рациональных чисел, когда каждый десятичный разряд числа записывается в виде его четырёхбитного двоичного кода.
Например, десятичное число 311 будет записано в двоичной системе счисления в двоичном коде как 1 0011 0111, а в двоично-десятичном коде как 0011 0001 0001.

далее
Following is the declaration for sprintf() function.
Код:
int sprintf(char *str, const char *format, ...)

Цитата:
format − This is the String that contains the text to be written to buffer. It can optionally contain embedded format tags that are replaced by the values specified in subsequent additional arguments and formatted as requested. Format tags prototype: %[flags][width][.precision][length]specifier, as explained below −
....
d or i Signed decimal integer
....

имхо Signed decimal integer != BCD data format

з.ы. время и пр. RTC можно легко читать в принципе и без HAL, типа:
Код:
    uint32_t Time = RTC->TR;

далее немного логики:
Код:
    // Час
   Hours = ((Time >> 20) & 0x03) * 10 + ((Time >> 16) & 0x0f);
    // Минуты
   Minutes = ((Time >> 12) & 0x07) * 10 + ((Time >> 8) & 0x0f);
    // Секунды
   Seconds = ((Time >> 4) & 0x07) * 10 + ((Time >> 0) & 0x0f);


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Пт фев 24, 2017 21:24:09 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
JustRom писал(а):
1) так и должно быть, RTC не сбросится, пока не переткнете питание, так как он находится в backup domain регистре.
2) RTC имеет 32-разрядный счетный регистр, значение которого увеличивается на 1 (при правильной настройке тактирования) каждую секунду.
Какой у Вас камень? Вероятнее всего что-то не так с фукцией, которая конвертирует 32-битное значение в текущее время. Приложите архив проекта, гляну.

Stm32l152
Вопрос по первому пункту: я как бы подозревал, что надо перегружать, только в HAL я что то подобной функции не нашел или это надо делать ручками?


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Пт фев 24, 2017 22:13:26 
Первый раз сказал Мяу!
Аватар пользователя

Карма: 1
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 06, 2016 14:26:07
Сообщений: 29
Рейтинг сообщения: 0
Код:
__HAL_RCC_BACKUPRESET_FORCE


Точно сбросит весь backup domain, заодно и RTC. А вообще есть замечательный документ по HAL, думаю он подскажет лучше кого-либо.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Сб фев 25, 2017 03:17:27 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
В том то все и дело, что не подсказал. Поэтому тут и спрашиваю. Да и сброс этого регистра это как бы не очень очевидно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Сб фев 25, 2017 08:05:34 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
из халовского примера (правда для F4, но какая разница, если хал):
Код:
/**
  * @brief  Display the current time and date.
  * @param  showtime : pointer to buffer
  * @param  showdate : pointer to buffer
  * @retval None
  */
static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
{
  RTC_DateTypeDef sdatestructureget;
  RTC_TimeTypeDef stimestructureget;

  /* Get the RTC current Time */
  HAL_RTC_GetTime(&RtcHandle, &stimestructureget, RTC_FORMAT_BIN);
  /* Get the RTC current Date */
  HAL_RTC_GetDate(&RtcHandle, &sdatestructureget, RTC_FORMAT_BIN);
  /* Display time Format : hh:mm:ss */
  sprintf((char *)showtime, "%2d:%2d:%2d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
  /* Display date Format : mm-dd-yy */
  sprintf((char *)showdate, "%2d-%2d-%2d", sdatestructureget.Month, sdatestructureget.Date, 2000 + sdatestructureget.Year);
}

все ж таки RTC_FORMAT_BIN


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Сб фев 25, 2017 08:29:20 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Олег, на самом деле все равно, BIN или BCD.
В большинстве примеров выводиться через BCD.
Но основную проблему - обновления на LCD не получилось победить.
Пробовал по разному. В инициализации есть такая строка:
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
а так же
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
меняя Set на Get и вставляя в основной цикл ничего не менаяется


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Сб фев 25, 2017 16:41:16 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 12
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 200
Рейтинг сообщения: 0
Если включен буфер - то нужно сбросить триггер, и успеть прочитать время до его установки, если он успеет установится -повторить.
Если буфер не включен - читать в цикле до совпадения.
MPU->RBAR = 0x40000001;
MPU->RASR = 0x13040039; /// C=0, B=0, TEX=0, S=1, SRD=0, XN=1, AP=3, size=0x16 (0.5G)
МPU регион периферии объявить как память без кеша, без буфера, без обратной записи, и без исполнения кода. Обращение мк к этой области будет как в старых ламповых компах - безусловным, пошаговым, и крайне тормозным. Но зато всегда актуальным.

Цитата:

uint32_t taim0;
uint32_t taim3;
if (RTC->CR & RTC_CR_BYPSHAD == 1)
{
do
{
taim0 = RTC->TR;
taim3 = RTC->DR;
}while (!(taim0 == RTC->TR));
}else
{
do
{
RTC->ISR &= ~RTC_ISR_RSF;
taim0 = RTC->TR;
taim3 = RTC->DR;
}while (RTC->ISR & RTC_ISR_RSF);
};

_________________
sRtoS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RTC HAL Не обновляется время.
СообщениеДобавлено: Ср мар 01, 2017 09:47:37 
Родился

Зарегистрирован: Пт янв 27, 2017 21:07:35
Сообщений: 10
Рейтинг сообщения: 0
Отвечу сам на свой вопрос:
Прежде Олег, прошу прощения, все таки Вы были правы: надо FORMAT_BIN.
Что бы не придумывать много слов - вставлю цитату из другого форума, которая решила проблему.
Во всех прошлых проектах мне необходимо было считывать дату и время, в текущем проекте только время. Почитав UM1725, нашел такие слова:
You must call HAL_RTC_GetDate() after
HAL_RTC_GetTime() to unlock the values in the higher-order
calendar shadow registers to ensure consistency between the
time and date values. Reading RTC current time locks the
values in calendar shadow registers until Current date is read.
Добавил после HAL_RTC_GetTime(&hrtc, &sTime, FORMAT_BIN) считывание даты HAL_RTC_GetDate(&hrtc, &sDate, FORMAT_BIN) и все завелось. Короче обязательно нужно считывать и дату и время, что дебаггер успешно и делал)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: moldik и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y