/** * @brief Configure the RTC peripheral by selecting the clock source. * @param None * @retval None */ static void RTC_Config(void) { /*##-1- Configure the RTC peripheral #######################################*/ /* Configure RTC prescaler and RTC data registers */ /* RTC configured as follow: - Asynch Prediv = Calculated automatically by HAL (based on LSI at 40kHz) */ RtcHandle.Instance = RTC; RtcHandle.Init.AsynchPrediv = RTC_AUTO_1_SECOND; if(HAL_RTC_Init(&RtcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /*##-2- Check if data stored in BackUp register1: Wakeup timer enable #######*/ /* Read the Back Up Register 1 Data */ if (HAL_RTCEx_BKUPRead(&RtcHandle, RTC_BKP_DR1) == WAKEUP_TIMER_ENABLE) { /* if the wakeup timer is enabled then desable it to disable the wakeup timer interrupt */ if(HAL_RTCEx_DeactivateSecond(&RtcHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } } /*##-3- Configure the RTC Wakeup peripheral #################################*/ HAL_RTCEx_SetSecond_IT(&RtcHandle); /*##-4- Write 'wakeup timer enabled' tag in RTC Backup data Register 1 #######*/ HAL_RTCEx_BKUPWrite(&RtcHandle, RTC_BKP_DR1, WAKEUP_TIMER_ENABLE); }
void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) { if(hrtc->Instance==RTC) { /* USER CODE BEGIN RTC_MspInit 0 */ HAL_RTCEx_SetSecond_IT(hrtc); /* USER CODE END RTC_MspInit 0 */ HAL_PWR_EnableBkUpAccess(); /* Enable BKP CLK enable for backup registers */ __HAL_RCC_BKP_CLK_ENABLE(); /* Peripheral clock enable */ __HAL_RCC_RTC_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(RTC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(RTC_IRQn); /* USER CODE BEGIN RTC_MspInit 1 */ /* USER CODE END RTC_MspInit 1 */ } }
void RTC_Init(void) { RTC_DateTypeDef DateToUpdate; HAL_PWR_EnableBkUpAccess(); /* Enable BKP CLK enable for backup registers */ __HAL_RCC_BKP_CLK_ENABLE(); /* Peripheral clock enable */ __HAL_RCC_RTC_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(RTC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(RTC_IRQn); HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0); HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn); /**Initialize RTC and set the Time and Date */ hrtc.Instance = RTC; hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE; HAL_RTC_Init(&hrtc); if (HAL_RTCEx_BKUPRead(&hrtc, 1) != RTC_IS_SET) {// check RTC is init or no HAL_RTC_GetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD); if (DateToUpdate.Year == 0x0) { sTime.Hours = 0x20; sTime.Minutes = 0x10; sTime.Seconds = 0; //HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD); DateToUpdate.WeekDay = RTC_WEEKDAY_THURSDAY; DateToUpdate.Month = RTC_MONTH_AUGUST; DateToUpdate.Date = 0x11; DateToUpdate.Year = 0x16; //HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD); //directly write to counter // if(something == 1) // { // something = 0; // while ((hrtc.Instance->CRL | RTC_CRL_RTOFF) == 0); // hrtc.Instance->CRL |= RTC_CRL_CNF; // hrtc.Instance->CNTL = 0xD63C; // hrtc.Instance->CNTH = 0x57DF; // hrtc.Instance->CRL &= ~RTC_CRL_CNF; // } } HAL_RTCEx_BKUPWrite(&hrtc, 1, RTC_IS_SET); } HAL_RTCEx_SetSecond_IT(&hrtc); }