STM32F 系列單片機 調試記錄

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、休眠啓動

         外設休眠後,啓動時重新配置下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章