Подскажите как можно сделать калибровку часов в stm32f103. Сейчас работаю так: Код (C++): #include <STM32RTC.h> STM32RTC& rtc = STM32RTC::getInstance(); setup() { rtc.setClockSource(STM32RTC::LSE_CLOCK); rtc.begin(); // initialize RTC 24H format } Калибровка, и инициализация вроде как делается так: Код (C++): if ((RCC->BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN) //Проверка работы часов, если не включены, то инициализировать { RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN; //Включить тактирование PWR и Backup PWR->CR |= PWR_CR_DBP; //Разрешить доступ к Backup области RCC->BDCR |= RCC_BDCR_BDRST; //Сбросить Backup область RCC->BDCR &= ~RCC_BDCR_BDRST; RCC->BDCR |= RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_LSE; //Выбрать LSE источник (кварц 32768) и подать тактирование RCC->BDCR |= RCC_BDCR_LSEON; //Включить LSE while ((RCC->BDCR & RCC_BDCR_LSEON) != RCC_BDCR_LSEON){} //Дождаться включения BKP->RTCCR |= 3; //калибровка RTC while (!(RTC->CRL & RTC_CRL_RTOFF)); //проверить закончены ли изменения регистров RTC RTC->CRL |= RTC_CRL_CNF; //Разрешить Запись в регистры RTC RTC->PRLL = 0x7FFF; //Настроит делитель на 32768 (32767+1) BKP->RTCCR |= BKP_RTCCR_CCO; //Включение вывода Temper RTC->CRL &= ~RTC_CRL_CNF; //Запретить запись в регистры RTC while (!(RTC->CRL & RTC_CRL_RTOFF)); //Дождаться окончания записи RTC->CRL &= (uint16_t)~RTC_CRL_RSF; //Синхронизировать RTC while((RTC->CRL & RTC_CRL_RSF) != RTC_CRL_RSF){} //Дождаться синхронизации PWR->CR &= ~PWR_CR_DBP; //запретить доступ к Backup области } Но как правильнее будет делать калибровку, если использовать STM32RTC.h?
Никто не подскажет, потому как требования и цели не ясны. Если это некий прерыватель с синхронизацией времени (для диагностики изоляции объектов например) то это одно, а иное не понятно. PS: В далёком прошлом делал подобное. В начальном этапе по включению часы учились "ходить" точно по сигналу GPS, потом они шагали сами даже без GPS. Смысл в том чтобы все устройства включали и выключали подачу защитные потенциалы от станций катодной защиты синхронно (даже) по всей стране. В момент отключения производилась диагностика. А что Вам надо не знаю. Если просто часы то надо подобрать параметры. Вроде какой-то из таймеров в ARM/Cortex умеет работать в режиме часов.
Задача простая, часы c точным временем. Вместо использования отдельных часов RTC, у stm32f103 есть свой RTC, но у него есть погрешность и возможность калибровки. Вот теперь и вопрос, как правильно его использовать на Arduino и используя библиотеку STM32RTC.h
Понятно, что точность не идеальная, но после калибровки будет достаточно. Чтобы часы показывали достоверное время и можно были ими пользоваться
Я не понимаю в чем проблема. Настройте таймер и установите в его регистр (LD) нужное значение, которое будет автоматом загружаться в (VAL) при каждом прерывании. Я таймер настраивал на декремент и при нуле (VAL) происходило прерывание а из (LD) в (VAL) автоматом загружалось нужное значение. И всё начиналось заново.