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

stm32h7 RTC генерация прерывания раз в секунду

Думаю как лучше сделать.

Не нашел у RTC генерацию прерывания раз в секунду. А нужно каждую секунду изменять состояния переменных времени и даты. Не очень охота для этого заводить еще один таймер. 

Есть пути решения, генерации прерывания?

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


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

1 час назад, Alex_Golubev сказал:

Не нашел у RTC генерацию прерывания раз в секунду

Какая погрешность допустима?

18 минут назад, Arlleex сказал:

RTOS.

Это потребует заведения "ещё одного таймера SysTick", а автор этого не хочет))))))))))))

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


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

2 часа назад, Alex_Golubev сказал:

Не нашел у RTC генерацию прерывания раз в секунду.

Ну а будильник у него есть, как у младших братьев? ЗаводИте будильник, в его прерывании добавляйте секунду к предыдущей уставке.

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


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

3 часа назад, Alex_Golubev сказал:

Не нашел у RTC генерацию прерывания раз в секунду.

Есть же в RTC wakeup модуль, можно задать прерывание раз в секунду

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


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

Попытался настроить wakeup модуль:

	WRITE_REG(RTC->WPR,0xca);
	WRITE_REG(RTC->WPR,0x53);
	RTC->ISR = (uint32_t)RTC_INIT_MASK;
    while(!READ_BIT(RTC->ISR,RTC_ISR_INITF));

	MODIFY_REG(RTC->CR, RTC_CR_WUTIE, 0x0 << RTC_CR_WUTIE_Pos);
	MODIFY_REG(RTC->CR, RTC_CR_WUTE, 0x0 << RTC_CR_WUTE_Pos);

	MODIFY_REG(RTC->CR, RTC_CR_WUCKSEL, 0x0 << RTC_CR_WUCKSEL_Pos);

	MODIFY_REG(RTC->WUTR, RTC_WUTR_WUT, 0xffff << RTC_WUTR_WUT_Pos);

	MODIFY_REG(RTC->CR, RTC_CR_WUTIE, 0x1 << RTC_CR_WUTIE_Pos);
	MODIFY_REG(RTC->CR, RTC_CR_WUTE, 0x1 << RTC_CR_WUTE_Pos);

    CLEAR_BIT(RTC->ISR, RTC_ISR_INIT);
    WRITE_REG(RTC->WPR,0xff);

    EXTI->IMR1 |= EXTI_IMR1_IM19;

    RTC->ISR = (uint32_t)RTC_INIT_MASK;

	NVIC_SetPriority(RTC_WKUP_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
    NVIC_EnableIRQ(RTC_WKUP_IRQn); // line 19

Но прерывание 

void RTC_WKUP_IRQHandler(void) // прерывания для загрузки времени
{
	RTC->ISR &= ~RTC_ISR_WUTF;
	asm("nop");
}

Так и не вызвалось.

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


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

Как минимум не хватает

   EXTI->RTSR1 |= (1 << RTC_EXTI_LINE);


Нет вообще работы с собственно RTC и нет установки самого wakeup таймера и его прескалера.

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


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

On 3/23/2021 at 6:50 AM, Alex_Golubev said:

Думаю как лучше сделать.

Посмотреть примеры от ST.

Их уйма там.

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


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

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

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

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

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

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

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

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

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

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