初始化RTC
#define RTC_SET_CONFIG_FLAG 0x6066
if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1) != RTC_SET_CONFIG_FLAG)
{
RTC_Set_DateTime(20 ,5 ,28 ,4 ,1 ,7 ,0);
HAL_PWR_EnableBkUpAccess();
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,RTC_SET_CONFIG_FLAG);
}
void RTC_Set_DateTime(uint8_t year ,uint8_t month ,uint8_t date ,uint8_t weekday ,uint8_t hour, uint8_t minute ,uint8_t sec)
{
RTC_Set_Date(year ,month ,date ,weekday);
RTC_Set_Time(hour ,minute ,sec);
}
设置时间保存时间
void RTC_Set_Time(uint8_t Hours ,uint8_t Minutes ,uint8_t Seconds)
{
RTC_TimeTypeDef ConfigTime;
ConfigTime.Hours = Hours;
ConfigTime.Minutes = Minutes;
ConfigTime.Seconds = Seconds;
if(HAL_RTC_SetTime(&hrtc, &ConfigTime, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
}
void RTC_Set_Date(uint8_t Year ,uint8_t Month ,uint8_t Date ,uint8_t WeekDay)
{
RTC_DateTypeDef ConfigDate;
ConfigDate.Year = Year;
ConfigDate.Month = Month;
ConfigDate.Date = Date;
ConfigDate.WeekDay = WeekDay;
if(HAL_RTC_SetDate(&hrtc, &ConfigDate, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
}
获取实时时间
typedef struct DateTime
{
uint8_t Year;
uint8_t Month;
uint8_t Date;
uint8_t WeekDay;
uint8_t Hours;
uint8_t Minutes;
uint8_t Seconds;
}DateTime_Typedef;
int Get_Date_Time(DateTime_Typedef *pDateTime)
{
RTC_DateTypeDef CurrentDate;
RTC_TimeTypeDef CurrentTime;
if((HAL_OK == HAL_RTC_GetTime(&hrtc, &CurrentTime, RTC_FORMAT_BIN))
&& HAL_OK == HAL_RTC_GetDate(&hrtc, &CurrentDate, RTC_FORMAT_BIN))
{
pDateTime->Year = CurrentDate.Year+2000;
pDateTime->Month= CurrentDate.Month;
pDateTime->Date = CurrentDate.Date;
pDateTime->WeekDay = CurrentDate.WeekDay;
pDateTime->Hours = CurrentTime.Hours;
pDateTime->Minutes = CurrentTime.Minutes;
pDateTime->Seconds = CurrentTime.Seconds;
return 0 ;
}
return -1 ;
}
RTC后备区另类使用
typedef struct
{
uint16_t year;
uint16_t Month;
uint16_t Date;
uint16_t WeekDay;
}ConfigPar_t;
void Save_Config_Par(ConfigPar_t *pData)
{
HAL_PWR_EnableBkUpAccess();
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,pData->Year);
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR2,pData->Month);
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR3,pData->Date);
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR4,pData->WeekDay);
}
void Read_Config_Par(ConfigPar_t *pData)
{
pData->Year = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1);
pData->Month = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR2);
pData->Date = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR3);
pData->WeekDay = HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR4);
}