/* * Author: Pawel Jablonski * E-mail: pj@xirx.net * WWW: xirx.net * GIT: git.xirx.net * * License: You can use this code however you like * but leave information about the original author. * Code is free for non-commercial and commercial use. */ #include #include #include #include #include #include #include "rtc.h" static RTC_HandleTypeDef rtcHandle; //!< RTC HAL handle //! Init RTC and set up the RTC HAL handle void rtcInit(void) { __HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE); __HAL_RCC_RTC_ENABLE(); rtcHandle.Init.HourFormat = RTC_HOURFORMAT_24; rtcHandle.Init.AsynchPrediv = 127; rtcHandle.Init.SynchPrediv = 255; rtcHandle.Init.OutPut = RTC_OUTPUT_DISABLE; rtcHandle.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; rtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; rtcHandle.Instance = RTC; HAL_RTC_Init(&rtcHandle); } /** * Set date and time * * @param dateTime Date and time to set */ void rtcSetDateTime(struct RTCDateTime dateTime) { RTC_TimeTypeDef rtcTime = {0}; RTC_DateTypeDef rtcDate = {0}; rtcTime.Hours = dateTime.hour; rtcTime.Minutes = dateTime.minute; rtcTime.Seconds = dateTime.second; rtcTime.TimeFormat = RTC_HOURFORMAT_24; rtcTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; rtcTime.StoreOperation = RTC_STOREOPERATION_RESET; rtcDate.Year = dateTime.year; rtcDate.Month = dateTime.month; rtcDate.Date = dateTime.day; HAL_RTC_SetTime(&rtcHandle, &rtcTime, RTC_FORMAT_BIN); HAL_RTC_SetDate(&rtcHandle, &rtcDate, RTC_FORMAT_BIN); } /** * Get date and time * * @return Date and time */ struct RTCDateTime rtcGetDateTime(void) { RTC_TimeTypeDef rtcTime = {0}; RTC_DateTypeDef rtcDate = {0}; HAL_RTC_GetTime(&rtcHandle, &rtcTime, RTC_FORMAT_BIN); HAL_RTC_GetDate(&rtcHandle, &rtcDate, RTC_FORMAT_BIN); struct RTCDateTime dateTime; dateTime.hour = rtcTime.Hours; dateTime.minute = rtcTime.Minutes; dateTime.second = rtcTime.Seconds; dateTime.year = rtcDate.Year; dateTime.month = rtcDate.Month; dateTime.day = rtcDate.Date; return(dateTime); }