STM32CubeMX:RTC
阿新 • • 發佈:2019-02-11
晶片: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(); // } }