STM32L4xx_HAL_Driver  1.14.0
Extended RTC Wake-up functions

RTC Wake-up functions. More...

Modules

 Extended Peripheral Control functions
 

Functions

HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer (RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
 Set wake up timer. More...
 
HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT (RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock, uint32_t WakeUpAutoClr) HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc
 Set wake up timer with interrupt. More...
 
HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT (RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock)
 
HAL_StatusTypeDef HAL_RTCEx_DeactivateWakeUpTimer (RTC_HandleTypeDef *hrtc)
 Deactivate wake up timer counter. More...
 
uint32_t HAL_RTCEx_GetWakeUpTimer (RTC_HandleTypeDef *hrtc)
 Get wake up timer counter. More...
 
void HAL_RTCEx_WakeUpTimerIRQHandler (RTC_HandleTypeDef *hrtc)
 Handle Wake Up Timer interrupt request. More...
 
void HAL_RTCEx_WakeUpTimerEventCallback (RTC_HandleTypeDef *hrtc)
 
HAL_StatusTypeDef HAL_RTCEx_PollForWakeUpTimerEvent (RTC_HandleTypeDef *hrtc, uint32_t Timeout)
 
 assert_param (IS_RTC_WAKEUP_CLOCK(WakeUpClock))
 
 assert_param (IS_RTC_WAKEUP_COUNTER(WakeUpCounter))
 
 assert_param (WakeUpAutoClr<=WakeUpCounter)
 
 __HAL_LOCK (hrtc)
 
 __HAL_RTC_WRITEPROTECTION_DISABLE (hrtc)
 
 CLEAR_BIT (hrtc->Instance->CR, RTC_CR_WUTE)
 
 __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG (hrtc, RTC_FLAG_WUTF)
 
 if (READ_BIT(hrtc->Instance->ICSR, RTC_ICSR_INITF)==0U)
 
 MODIFY_REG (hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
 
 if (WakeUpAutoClr !=0u)
 
 __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT ()
 
 __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE ()
 
 __HAL_RTC_WAKEUPTIMER_ENABLE_IT (hrtc, RTC_IT_WUT)
 
 __HAL_RTC_WAKEUPTIMER_ENABLE (hrtc)
 
 __HAL_RTC_WRITEPROTECTION_ENABLE (hrtc)
 
 __HAL_UNLOCK (hrtc)
 

Variables

HAL_StatusTypeDef uint32_t WakeUpCounter
 
HAL_StatusTypeDef uint32_t uint32_t WakeUpClock
 
hrtc State = HAL_RTC_STATE_BUSY
 
hrtc Instance WUTR = (uint32_t)(WakeUpCounter | (WakeUpAutoClr << RTC_WUTR_WUTOCLR_Pos))
 
 else
 
return HAL_OK
 

Detailed Description

RTC Wake-up functions.

 ===============================================================================
                        ##### RTC Wake-up functions #####
 ===============================================================================

 [..] This section provides functions allowing to configure Wake-up feature

Function Documentation

◆ __HAL_LOCK()

__HAL_LOCK ( hrtc  )

◆ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG()

__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG ( hrtc  ,
RTC_FLAG_WUTF   
)

◆ __HAL_RTC_WAKEUPTIMER_ENABLE()

__HAL_RTC_WAKEUPTIMER_ENABLE ( hrtc  )

◆ __HAL_RTC_WAKEUPTIMER_ENABLE_IT()

__HAL_RTC_WAKEUPTIMER_ENABLE_IT ( hrtc  ,
RTC_IT_WUT   
)

◆ __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT()

__HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT ( )

◆ __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE()

__HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE ( )

◆ __HAL_RTC_WRITEPROTECTION_DISABLE()

__HAL_RTC_WRITEPROTECTION_DISABLE ( hrtc  )

◆ __HAL_RTC_WRITEPROTECTION_ENABLE()

__HAL_RTC_WRITEPROTECTION_ENABLE ( hrtc  )

◆ __HAL_UNLOCK()

__HAL_UNLOCK ( hrtc  )

◆ assert_param() [1/3]

assert_param ( IS_RTC_WAKEUP_CLOCK(WakeUpClock )

◆ assert_param() [2/3]

assert_param ( IS_RTC_WAKEUP_COUNTER(WakeUpCounter )

◆ assert_param() [3/3]

assert_param ( WakeUpAutoClr<=  WakeUpCounter)

◆ CLEAR_BIT()

CLEAR_BIT ( hrtc->Instance->  CR,
RTC_CR_WUTE   
)

◆ HAL_RTCEx_DeactivateWakeUpTimer()

HAL_StatusTypeDef HAL_RTCEx_DeactivateWakeUpTimer ( RTC_HandleTypeDef hrtc)

Deactivate wake up timer counter.

Parameters
hrtcRTC handle
Return values
HALstatus

Definition at line 893 of file stm32l4xx_hal_rtc_ex.c.

894 {
895  uint32_t tickstart;
896 
897  /* Process Locked */
898  __HAL_LOCK(hrtc);
899 
900  hrtc->State = HAL_RTC_STATE_BUSY;
901 
902  /* Disable the write protection for RTC registers */
904 
905  /* Disable the Wakeup Timer */
906  __HAL_RTC_WAKEUPTIMER_DISABLE(hrtc);
907 
908  /* In case of interrupt mode is used, the interrupt source must disabled */
909  __HAL_RTC_WAKEUPTIMER_DISABLE_IT(hrtc, RTC_IT_WUT);
910 
911  tickstart = HAL_GetTick();
912  /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
913  while (__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTWF) == 0U)
914  {
915  if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
916  {
917  /* Enable the write protection for RTC registers */
919 
921 
922  /* Process Unlocked */
923  __HAL_UNLOCK(hrtc);
924 
925  return HAL_TIMEOUT;
926  }
927  }
928 
929  /* Enable the write protection for RTC registers */
931 
932  hrtc->State = HAL_RTC_STATE_READY;
933 
934  /* Process Unlocked */
935  __HAL_UNLOCK(hrtc);
936 
937  return HAL_OK;
938 }
__IO HAL_RTCStateTypeDef State
__HAL_RTC_WRITEPROTECTION_DISABLE(hrtc)
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
__HAL_UNLOCK(hrtc)
__HAL_LOCK(hrtc)
return HAL_OK
__HAL_RTC_WRITEPROTECTION_ENABLE(hrtc)

◆ HAL_RTCEx_GetWakeUpTimer()

uint32_t HAL_RTCEx_GetWakeUpTimer ( RTC_HandleTypeDef hrtc)

Get wake up timer counter.

Parameters
hrtcRTC handle
Return values
Countervalue

Definition at line 945 of file stm32l4xx_hal_rtc_ex.c.

946 {
947  /* Get the counter value */
948  return ((uint32_t)(hrtc->Instance->WUTR & RTC_WUTR_WUT));
949 }

◆ HAL_RTCEx_PollForWakeUpTimerEvent()

HAL_StatusTypeDef HAL_RTCEx_PollForWakeUpTimerEvent ( RTC_HandleTypeDef hrtc,
uint32_t  Timeout 
)

◆ HAL_RTCEx_SetWakeUpTimer()

HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer ( RTC_HandleTypeDef hrtc,
uint32_t  WakeUpCounter,
uint32_t  WakeUpClock 
)

Set wake up timer.

Parameters
hrtcRTC handle
WakeUpCounterWake up counter
WakeUpClockWake up clock
Return values
HALstatus

Definition at line 699 of file stm32l4xx_hal_rtc_ex.c.

700 {
701  uint32_t tickstart;
702 
703  /* Check the parameters */
704  assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock));
705  assert_param(IS_RTC_WAKEUP_COUNTER(WakeUpCounter));
706 
707  /* Process Locked */
708  __HAL_LOCK(hrtc);
709 
710  hrtc->State = HAL_RTC_STATE_BUSY;
711 
712  /* Disable the write protection for RTC registers */
714 
715  /* Clear WUTE in RTC_CR to disable the wakeup timer */
716  CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE);
717 
718  /* Poll WUTWF until it is set in RTC_ICSR to make sure the access to wakeup autoreload
719  counter and to WUCKSEL[2:0] bits is allowed. This step must be skipped in
720  calendar initialization mode. */
721 #if defined(STM32L412xx) || defined(STM32L422xx)
722  if (READ_BIT(hrtc->Instance->ICSR, RTC_ICSR_INITF) == 0U)
723 #else
724  if (READ_BIT(hrtc->Instance->ISR, RTC_ISR_INITF) == 0U)
725 #endif
726  {
727  tickstart = HAL_GetTick();
728 #if defined(STM32L412xx) || defined(STM32L422xx)
729  while (READ_BIT(hrtc->Instance->ICSR, RTC_ICSR_WUTWF) == 0U)
730 #else
731  while (READ_BIT(hrtc->Instance->ISR, RTC_ISR_WUTWF) == 0U)
732 #endif
733  {
734  if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
735  {
736  /* Enable the write protection for RTC registers */
738 
740 
741  /* Process Unlocked */
742  __HAL_UNLOCK(hrtc);
743 
744  return HAL_TIMEOUT;
745  }
746  }
747  }
748 
749  /* Configure the clock source */
750  MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL, (uint32_t)WakeUpClock);
751 
752  /* Configure the Wakeup Timer counter */
753  WRITE_REG(hrtc->Instance->WUTR, (uint32_t)WakeUpCounter);
754 
755  /* Enable the Wakeup Timer */
756  SET_BIT(hrtc->Instance->CR, RTC_CR_WUTE);
757 
758  /* Enable the write protection for RTC registers */
760 
761  hrtc->State = HAL_RTC_STATE_READY;
762 
763  /* Process Unlocked */
764  __HAL_UNLOCK(hrtc);
765 
766  return HAL_OK;
767 }
HAL_StatusTypeDef uint32_t WakeUpCounter
HAL_StatusTypeDef uint32_t uint32_t WakeUpClock
__IO HAL_RTCStateTypeDef State
__HAL_RTC_WRITEPROTECTION_DISABLE(hrtc)
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
__HAL_UNLOCK(hrtc)
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
__HAL_LOCK(hrtc)
return HAL_OK
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
__HAL_RTC_WRITEPROTECTION_ENABLE(hrtc)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ HAL_RTCEx_SetWakeUpTimer_IT() [1/2]

HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT ( RTC_HandleTypeDef hrtc,
uint32_t  WakeUpCounter,
uint32_t  WakeUpClock,
uint32_t  WakeUpAutoClr 
)

Set wake up timer with interrupt.

Parameters
hrtcRTC handle
WakeUpCounterWake up counter
WakeUpClockWake up clock
WakeUpAutoClrWake up auto clear value (look at WUTOCLR in reference manual)
  • Only available for STM32L412xx and STM32L422xx
  • No effect if WakeUpAutoClr is set to zero
  • This feature is meaningful in case of Low power mode to avoid any RTC software execution after Wake Up. That is why when WakeUpAutoClr is set, EXTI is configured as EVENT instead of Interrupt to avoid useless IRQ handler execution.
Return values
HALstatus

◆ HAL_RTCEx_SetWakeUpTimer_IT() [2/2]

HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT ( RTC_HandleTypeDef hrtc,
uint32_t  WakeUpCounter,
uint32_t  WakeUpClock 
)

◆ HAL_RTCEx_WakeUpTimerEventCallback()

void HAL_RTCEx_WakeUpTimerEventCallback ( RTC_HandleTypeDef hrtc)

◆ HAL_RTCEx_WakeUpTimerIRQHandler()

void HAL_RTCEx_WakeUpTimerIRQHandler ( RTC_HandleTypeDef hrtc)

Handle Wake Up Timer interrupt request.

Parameters
hrtcRTC handle
Return values
None

Wake Up Timer callback.

Parameters
hrtcRTC handle
Return values
None

Handle Wake Up Timer Polling.

Parameters
hrtcRTC handle
TimeoutTimeout duration
Return values
HALstatus

Definition at line 956 of file stm32l4xx_hal_rtc_ex.c.

◆ if() [1/2]

if ( READ_BIT(hrtc->Instance->ICSR, RTC_ICSR_INITF)  = = 0U)

Definition at line 815 of file stm32l4xx_hal_rtc_ex.c.

819  {
820  tickstart = HAL_GetTick();
821 #if defined(STM32L412xx) || defined(STM32L422xx)
822  while (READ_BIT(hrtc->Instance->ICSR, RTC_ICSR_WUTWF) == 0U)
823 #else
824  while (READ_BIT(hrtc->Instance->ISR, RTC_ISR_WUTWF) == 0U)
825 #endif
826  {
827  if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
828  {
829  /* Enable the write protection for RTC registers */
831 
832  hrtc->State = HAL_RTC_STATE_TIMEOUT;
833 
834  /* Process Unlocked */
835  __HAL_UNLOCK(hrtc);
836 
837  return HAL_TIMEOUT;
838  }
839  }
840  }
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
__HAL_UNLOCK(hrtc)
__HAL_RTC_WRITEPROTECTION_ENABLE(hrtc)

◆ if() [2/2]

if ( WakeUpAutoClr !  = 0u)

Definition at line 855 of file stm32l4xx_hal_rtc_ex.c.

856  {
857  /* RTC WakeUpTimer EXTI Configuration: Event configuration */
858  __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_EVENT();
859  }

◆ MODIFY_REG()

MODIFY_REG ( hrtc->Instance->  CR,
RTC_CR_WUCKSEL  ,
(uint32_t)  WakeUpClock 
)

Variable Documentation

◆ else

else
Initial value:

Definition at line 861 of file stm32l4xx_hal_rtc_ex.c.

◆ HAL_OK

return HAL_OK

Definition at line 885 of file stm32l4xx_hal_rtc_ex.c.

◆ State

hrtc State = HAL_RTC_STATE_BUSY

Definition at line 800 of file stm32l4xx_hal_rtc_ex.c.

◆ WakeUpClock

HAL_StatusTypeDef uint32_t uint32_t WakeUpClock
Initial value:
{
uint32_t tickstart

Definition at line 786 of file stm32l4xx_hal_rtc_ex.c.

◆ WakeUpCounter

HAL_StatusTypeDef uint32_t WakeUpCounter

Definition at line 784 of file stm32l4xx_hal_rtc_ex.c.

◆ WUTR

hrtc Instance WUTR = (uint32_t)(WakeUpCounter | (WakeUpAutoClr << RTC_WUTR_WUTOCLR_Pos))

Definition at line 844 of file stm32l4xx_hal_rtc_ex.c.