示例#1
0
/**
  * @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);

}
示例#2
0
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 */
  }

}
示例#3
0
文件: Init.c 项目: antgrem/Meteo
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);
	

}