SunRiver napisał(a):
ale dlaczego 37Khz ?? jak masz tam do tego celu kwarca 32.768 zegarkowego właśnie do RTC
W nucleo, którego używam jest dostarczony właśnie kwarc zegarkowy specjalnie do tego przeznaczony, ale gdy inicjalizuja właśnie go to w czasie 1 minuty, spieszy sie on aż o 7 sekund, więc użyłem LSI 37kHZ. Poniżej zamieszczam swój kod:
Konfiguracja:
Kod:
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
HAL_PWR_EnableBkUpAccess();
__HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc);
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
__HAL_RCC_RTC_ENABLE();
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 124;
hrtc.Init.SynchPrediv = 295;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_PC13;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_LOW;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
HAL_RTC_Init(&hrtc);
sTime.Hours = 0;
sTime.Minutes = 0;
sTime.Seconds = 0;
sTime.SubSeconds = 0;
sTime.TimeFormat = RTC_HOURFORMAT_24;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_SET;
HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BIN);
sDate.WeekDay = RTC_WEEKDAY_FRIDAY;
sDate.Month = RTC_MONTH_NOVEMBER;
sDate.Date = 24;
sDate.Year = 15;
HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BIN);
Wykonanie:
Kod:
HAL_RTC_GetTime(&hrtc, &time, FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, FORMAT_BIN);
printf("Aktualna godzina: %d:%d:%d\n\r", time.Hours, time.Minutes, time.Seconds);
Zgodnie ze specyfikacja
Widać jakie muszę dobrać wartości by wszystko działało.
QuadMan napisał(a):
Witam,
możesz oczywiście skorygować wskazania zegara, istnieje możliwość kalibracji ( a nawet dwie ), ale przy takiej odchyłce przy zastosowaniu LSE na pewno coś źle robisz. Pokaż kod, bo tak to sobie możemy gdybać.
Pozdrawiam, QuadMan.
Mógłbyś podać te 2 metody?
Pozdrawiam