@@ -1063,33 +1063,54 @@ HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t
1063
1063
1064
1064
/* Disable the write protection for RTC registers */
1065
1065
__HAL_RTC_WRITEPROTECTION_DISABLE (hrtc );
1066
-
1067
- __HAL_RTC_WAKEUPTIMER_DISABLE (hrtc );
1068
-
1069
- /* Get tick */
1070
- tickstart = HAL_GetTick ();
1071
1066
1072
- /*Check RTC WUTWF flag is reset only when wake up timer enabled*/
1067
+ /*Check RTC WUTWF flag is reset only when wake up timer enabled*/
1073
1068
if ((hrtc -> Instance -> CR & RTC_CR_WUTE ) != RESET )
1074
1069
{
1075
- /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
1076
- while (__HAL_RTC_WAKEUPTIMER_GET_FLAG (hrtc , RTC_FLAG_WUTWF ) == RESET )
1070
+ tickstart = HAL_GetTick ();
1071
+
1072
+ /* Wait till RTC WUTWF flag is reset and if Time out is reached exit */
1073
+ while (__HAL_RTC_WAKEUPTIMER_GET_FLAG (hrtc , RTC_FLAG_WUTWF ) == SET )
1077
1074
{
1078
1075
if ((HAL_GetTick () - tickstart ) > RTC_TIMEOUT_VALUE )
1079
1076
{
1080
1077
/* Enable the write protection for RTC registers */
1081
1078
__HAL_RTC_WRITEPROTECTION_ENABLE (hrtc );
1082
1079
1083
- hrtc -> State = HAL_RTC_STATE_TIMEOUT ;
1084
-
1085
- /* Process Unlocked */
1080
+ hrtc -> State = HAL_RTC_STATE_TIMEOUT ;
1081
+
1082
+ /* Process Unlocked */
1086
1083
__HAL_UNLOCK (hrtc );
1087
-
1084
+
1088
1085
return HAL_TIMEOUT ;
1089
1086
}
1090
1087
}
1091
1088
}
1092
-
1089
+ /* Disable the Wake-Up timer */
1090
+ __HAL_RTC_WAKEUPTIMER_DISABLE (hrtc );
1091
+
1092
+ /* Clear flag Wake-Up */
1093
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG (hrtc , RTC_FLAG_WUTF );
1094
+
1095
+ tickstart = HAL_GetTick ();
1096
+
1097
+ /* Wait till RTC WUTWF flag is set and if Time out is reached exit */
1098
+ while (__HAL_RTC_WAKEUPTIMER_GET_FLAG (hrtc , RTC_FLAG_WUTWF ) == RESET )
1099
+ {
1100
+ if ((HAL_GetTick () - tickstart ) > RTC_TIMEOUT_VALUE )
1101
+ {
1102
+ /* Enable the write protection for RTC registers */
1103
+ __HAL_RTC_WRITEPROTECTION_ENABLE (hrtc );
1104
+
1105
+ hrtc -> State = HAL_RTC_STATE_TIMEOUT ;
1106
+
1107
+ /* Process Unlocked */
1108
+ __HAL_UNLOCK (hrtc );
1109
+
1110
+ return HAL_TIMEOUT ;
1111
+ }
1112
+ }
1113
+
1093
1114
/* Configure the Wakeup Timer counter */
1094
1115
hrtc -> Instance -> WUTR = (uint32_t )WakeUpCounter ;
1095
1116
@@ -1098,15 +1119,12 @@ HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer_IT(RTC_HandleTypeDef *hrtc, uint32_t
1098
1119
1099
1120
/* Configure the clock source */
1100
1121
hrtc -> Instance -> CR |= (uint32_t )WakeUpClock ;
1101
-
1122
+
1102
1123
/* RTC WakeUpTimer Interrupt Configuration: EXTI configuration */
1103
1124
__HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT ();
1104
-
1105
- EXTI -> RTSR |= RTC_EXTI_LINE_WAKEUPTIMER_EVENT ;
1106
-
1107
- /* Clear RTC Wake Up timer Flag */
1108
- __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG (hrtc , RTC_FLAG_WUTF );
1109
-
1125
+
1126
+ __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE ();
1127
+
1110
1128
/* Configure the Interrupt in the RTC_CR register */
1111
1129
__HAL_RTC_WAKEUPTIMER_ENABLE_IT (hrtc ,RTC_IT_WUT );
1112
1130
0 commit comments