Калибровка часов stm32f103

Тема в разделе "Arduino & Shields", создана пользователем k008, 31 авг 2024.

Метки:
  1. k008

    k008 Нерд

    Подскажите как можно сделать калибровку часов в 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?
     
  2. k008

    k008 Нерд

    Никто не подскажет? Это действительно сложный вопрос?