diff --git a/Firmware/Core/Src/rtc.c b/Firmware/Core/Src/rtc.c index 0ddfc0f..1beecfe 100644 --- a/Firmware/Core/Src/rtc.c +++ b/Firmware/Core/Src/rtc.c @@ -27,8 +27,7 @@ RTC_HandleTypeDef hrtc; /* RTC init function */ -void MX_RTC_Init(void) -{ +void MX_RTC_Init(void) { /* USER CODE BEGIN RTC_Init 0 */ @@ -46,13 +45,22 @@ void MX_RTC_Init(void) hrtc.Instance = RTC; hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM; - if (HAL_RTC_Init(&hrtc) != HAL_OK) - { - Error_Handler(); + if (HAL_RTC_Init(&hrtc) != HAL_OK) { + Error_Handler(); } /* USER CODE BEGIN Check_RTC_BKUP */ + __HAL_RTC_SECOND_ENABLE_IT(&hrtc, RTC_IT_SEC); + if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) == 0x1234) { + // 从备份寄存器还原日期 + hrtc.DateToUpdate.Year = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR2); + hrtc.DateToUpdate.Month = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR3); + hrtc.DateToUpdate.Date = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR4); + // 把RTC计数单元的计数值更新到日期 + HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); + return; + } /* USER CODE END Check_RTC_BKUP */ /** Initialize RTC and set the Time and Date @@ -61,67 +69,61 @@ void MX_RTC_Init(void) sTime.Minutes = 0; sTime.Seconds = 0; - if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) - { - Error_Handler(); + if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) { + Error_Handler(); } DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY; DateToUpdate.Month = RTC_MONTH_JANUARY; DateToUpdate.Date = 1; DateToUpdate.Year = 0; - if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN) != HAL_OK) - { - Error_Handler(); + if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN) != HAL_OK) { + Error_Handler(); } /* USER CODE BEGIN RTC_Init 2 */ - + HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x1234); /* USER CODE END RTC_Init 2 */ } -void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) -{ +void HAL_RTC_MspInit(RTC_HandleTypeDef *rtcHandle) { - if(rtcHandle->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspInit 0 */ + if (rtcHandle->Instance == RTC) { + /* USER CODE BEGIN RTC_MspInit 0 */ - /* USER CODE END RTC_MspInit 0 */ - HAL_PWR_EnableBkUpAccess(); - /* Enable BKP CLK enable for backup registers */ - __HAL_RCC_BKP_CLK_ENABLE(); - /* RTC clock enable */ - __HAL_RCC_RTC_ENABLE(); + /* USER CODE END RTC_MspInit 0 */ + HAL_PWR_EnableBkUpAccess(); + /* Enable BKP CLK enable for backup registers */ + __HAL_RCC_BKP_CLK_ENABLE(); + /* RTC clock enable */ + __HAL_RCC_RTC_ENABLE(); - /* RTC interrupt Init */ - HAL_NVIC_SetPriority(RTC_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(RTC_IRQn); - HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn); - /* USER CODE BEGIN RTC_MspInit 1 */ + /* RTC interrupt Init */ + HAL_NVIC_SetPriority(RTC_IRQn, 3, 0); + HAL_NVIC_EnableIRQ(RTC_IRQn); + HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 3, 0); + HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn); + /* USER CODE BEGIN RTC_MspInit 1 */ - /* USER CODE END RTC_MspInit 1 */ + /* USER CODE END RTC_MspInit 1 */ } } -void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) -{ +void HAL_RTC_MspDeInit(RTC_HandleTypeDef *rtcHandle) { - if(rtcHandle->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspDeInit 0 */ + if (rtcHandle->Instance == RTC) { + /* USER CODE BEGIN RTC_MspDeInit 0 */ - /* USER CODE END RTC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_RTC_DISABLE(); + /* USER CODE END RTC_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_RTC_DISABLE(); - /* RTC interrupt Deinit */ - HAL_NVIC_DisableIRQ(RTC_IRQn); - HAL_NVIC_DisableIRQ(RTC_Alarm_IRQn); - /* USER CODE BEGIN RTC_MspDeInit 1 */ + /* RTC interrupt Deinit */ + HAL_NVIC_DisableIRQ(RTC_IRQn); + HAL_NVIC_DisableIRQ(RTC_Alarm_IRQn); + /* USER CODE BEGIN RTC_MspDeInit 1 */ - /* USER CODE END RTC_MspDeInit 1 */ + /* USER CODE END RTC_MspDeInit 1 */ } }