Alex_Golubev 0 23 марта, 2021 Опубликовано 23 марта, 2021 · Жалоба Думаю как лучше сделать. Не нашел у RTC генерацию прерывания раз в секунду. А нужно каждую секунду изменять состояния переменных времени и даты. Не очень охота для этого заводить еще один таймер. Есть пути решения, генерации прерывания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 23 марта, 2021 Опубликовано 23 марта, 2021 · Жалоба RTOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 23 марта, 2021 Опубликовано 23 марта, 2021 · Жалоба 1 час назад, Alex_Golubev сказал: Не нашел у RTC генерацию прерывания раз в секунду Какая погрешность допустима? 18 минут назад, Arlleex сказал: RTOS. Это потребует заведения "ещё одного таймера SysTick", а автор этого не хочет)))))))))))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 120 23 марта, 2021 Опубликовано 23 марта, 2021 · Жалоба 2 часа назад, Alex_Golubev сказал: Не нашел у RTC генерацию прерывания раз в секунду. Ну а будильник у него есть, как у младших братьев? ЗаводИте будильник, в его прерывании добавляйте секунду к предыдущей уставке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 23 марта, 2021 Опубликовано 23 марта, 2021 · Жалоба 3 часа назад, Alex_Golubev сказал: Не нашел у RTC генерацию прерывания раз в секунду. Есть же в RTC wakeup модуль, можно задать прерывание раз в секунду Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба Попытался настроить 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"); } Так и не вызвалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба Как минимум не хватает EXTI->RTSR1 |= (1 << RTC_EXTI_LINE); Нет вообще работы с собственно RTC и нет установки самого wakeup таймера и его прескалера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 29 марта, 2021 Опубликовано 29 марта, 2021 · Жалоба On 3/23/2021 at 6:50 AM, Alex_Golubev said: Думаю как лучше сделать. Посмотреть примеры от ST. Их уйма там. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться