1. 程式人生 > >STM32CubeMX:RTC

STM32CubeMX:RTC

晶片:STM32F103C8T6

應用管腳:

USART1、RCC、RTC

配置介面


修改時鐘源為LSE


配置RTC,可設定時間及日期


應用函式

			HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
			HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
		
			printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);
			printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);
設定時間
				stimestructure.Hours=huart1_RxBuffer[1];
				stimestructure.Minutes=huart1_RxBuffer[2];
				stimestructure.Seconds=huart1_RxBuffer[3];
				
				if (HAL_RTC_SetTime(&hrtc, &stimestructure, RTC_FORMAT_BCD) != HAL_OK)
				{
					Error_Handler();
				}
設定日期
				sdatestructure.Year=huart1_RxBuffer[1];
				sdatestructure.Month=huart1_RxBuffer[2];
				sdatestructure.Date=huart1_RxBuffer[3];
				sdatestructure.WeekDay=huart1_RxBuffer[4];
				
				if (HAL_RTC_SetDate(&hrtc, &sdatestructure, RTC_FORMAT_BCD) != HAL_OK)
				{
					Error_Handler();
				}
注意:

設定完成後,重啟依舊會恢復到原初始化狀態,修改MX_RTC_Init函式,將設定日期及時間註釋掉,可解決掉電恢復初始化問題。但掉電日期依舊恢復預設,不知為何原因,後期實際用途中再深入使用。

/* RTC init function */
static void MX_RTC_Init(void)
{
//  RTC_TimeTypeDef sTime;
//  RTC_DateTypeDef DateToUpdate;

    /**Initialize RTC and set the Time and Date 
    */
  hrtc.Instance = RTC;
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }

//  sTime.Hours = 0x1;
//  sTime.Minutes = 0x0;
//  sTime.Seconds = 0x0;

//  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
//  {
//    Error_Handler();
//  }

//  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
//  DateToUpdate.Month = RTC_MONTH_JANUARY;
//  DateToUpdate.Date = 0x1;
//  DateToUpdate.Year = 0x0;

//  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
//  {
//    Error_Handler();
//  }
}