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

 
 
> STM32F107 и RTC.
Jenya7
сообщение Jan 14 2016, 09:15
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Насколько я понимаю есть только таймер. Хардварных регистров для секунд, минут, часов нету.
Меня сбил с толку рисунок в мануале. это я так понимаю надо реализовывать самому?



Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlanDrakes
сообщение Jan 14 2016, 10:35
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



В STM32F1XX есть только регистр-счётчик (точнее, два 16-битных) - RTC_CNTH / RTC_CNTL. Вот в F3/F4 там регистры интереснее.
То есть, у вас есть 32 бита (секунд, если делить тактовую RTC до секунд, либо более короткие промежутки времени), и значение секунд/минут/часов/даты нужно вычислять.

Рекомендую так же обратиться к самой первой странице данного документа, где определён список контроллеров, на которые он распространяется. Там отсутствуют кристаллы STM32F1. А так же сноска несколько выше Вашего рисунка, отсылающая к таблице 15, где указано наличие/отсутствие специфических для линейки параметров, как то функции/регистры RTC.

Для линейки STM32F1XX нужно реализовывать данный функционал программно.

Сообщение отредактировал AlanDrakes - Jan 14 2016, 10:53
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 14 2016, 10:54
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(AlanDrakes @ Jan 14 2016, 16:35) *
В STM32F1XX есть только регистр-счётчик (точнее, два 16-битных) - RTC_CNTH / RTC_CNTL. Вот в F3/F4 там регистры интереснее.
То есть, у вас есть 32 бита (секунд, если делить тактовую RTC до секунд, либо более короткие промежутки времени), и значение секунд/минут/часов/даты нужно вычислять.

Рекомендую так же обратиться к самой первой странице данного документа, где определён список контроллеров, на которые он распространяется. Там отсутствуют кристаллы STM32F1. А так же сноска несколько выше Вашего рисунка, отсылающая к таблице 15, где указано наличие/отсутствие специфических для линейки параметров, как то функции/регистры RTC.

мда...посмотрел я на эти вычисления
Код
if (RTC_GetCounter() == 0x0001517F)
  {
     RTC_SetCounter(0x0);
     /* Wait until last write operation on RTC registers has finished */
     RTC_WaitForLastTask();
  }
  
  /* Compute  hours */
  THH = TimeVar / 3600;
  /* Compute minutes */
  TMM = (TimeVar % 3600) / 60;
  /* Compute seconds */
  TSS = (TimeVar % 3600) % 60;

гораздо проще и быстрее в интерапте обработать.
CODE
void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
/* Clear the corresponding RTC pending bit */
RTC->CRL &= (uint16_t)~RTC_IT_SEC;

rtc_sec_int = 1;

rtc.rtcSec++; // increment seconds
if(rtc.rtcSec > 59) // check seconds overflow
{
rtc.rtcSec = 0;
rtc.rtcMin++; // increment minutes
if(rtc.rtcMin > 59) // check minutes overflow
{
rtc.rtcMin = 0;
rtc.rtcHour++; // increment hours
rtc_hour_int = 1;
if(rtc.rtcHour > 23) // check hours overflow
{
rtc.rtcHour = 0;
rtc.rtcDay++; // increment days
UpdateDayOfWeek();
//if(rtc.rtcDay > daysInMonthCalc[rtc.rtcMonth-1]) // check days overflow
if(rtc.rtcDay > numDaysInMonth[rtc.rtcMonth])
{
rtc.rtcDay = 1;
rtc.rtcMonth++; // increment months
if(rtc.rtcMonth > 12) // check months overflow
{
rtc.rtcMonth = 1;
rtc.rtcYear++; // increment years
}
}
}
}
}

/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
}
}


Сообщение отредактировал IgorKossak - Jan 14 2016, 19:31
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 19:40
Рейтинг@Mail.ru


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