1、RTC 配置
調一個 RTC,剛開始運行都正常,設置的時間跟讀出的時間一樣。但是換了一個芯片出現讀出的年不對的情況,調試才發現是RTC設置的時候有些參數漏掉沒填導致的。
T_S32 DRIVER_RTC_Ioctl(T_S32 s32Cmd, T_VOID *pvData)
{
switch(s32Cmd)
{
case E_RTC_IOCTL_CMD_SET_WAKE_INT:
{
//T_U16 u16Cnt = *((T_U16 *)pvData);
}
break;
case E_RTC_IOCTL_CMD_READ_TIME:
{
S_RtcIoctlRead *pstTime = (S_RtcIoctlRead *)pvData;
RTC_DateTypeDef stDate;
RTC_TimeTypeDef stTime;
HAL_RTC_GetTime(&RtcHandle, &stTime, RTC_FORMAT_BCD);
HAL_RTC_GetDate(&RtcHandle, &stDate, RTC_FORMAT_BCD);
pstTime->u8Year = stDate.Year;
pstTime->u8Month = stDate.Month;
pstTime->u8Date = stDate.Date;
pstTime->u8WeekDay = stDate.WeekDay;
pstTime->u8Hours = stTime.Hours;
pstTime->u8Minutes = stTime.Minutes;
pstTime->u8Seconds = stTime.Seconds;
}
break;
case E_RTC_IOCTL_CMD_WRITE_TIME:
{
S_RtcIoctlWrite *pstTime = (S_RtcIoctlWrite *)pvData;
RTC_DateTypeDef stDate;
RTC_TimeTypeDef stTime;
stDate.Year = pstTime->u8Year;
stDate.Month = pstTime->u8Month;
stDate.Date = pstTime->u8Date;
stDate.WeekDay = 0x01; //這個參數要設置下 避免不在 1-7的範圍裏面
stTime.Hours = pstTime->u8Hours;
stTime.Minutes = pstTime->u8Minutes;
stTime.Seconds = pstTime->u8Seconds;
stTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; //這個參數要設置下
stTime.StoreOperation = RTC_STOREOPERATION_RESET; //這個參數要設置下
HAL_RTC_SetTime(&RtcHandle, &stTime, RTC_FORMAT_BCD);
HAL_RTC_SetDate(&RtcHandle, &stDate, RTC_FORMAT_BCD);
}
break;
}
return RET_SUCCESS;
}
2、休眠啓動
外設休眠後,啓動時重新配置下