@@ -205,6 +205,14 @@ static void RTC_initClock(sourceClock_t source)
205205 enableClock (HSI_CLOCK );
206206 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC_WDG_BLEWKUP ;
207207 PeriphClkInit .RTCWDGBLEWKUPClockSelection = RCC_RTC_WDG_BLEWKUP_CLKSOURCE_HSI64M_DIV2048 ;
208+ #elif defined(RCC_PERIPHCLK_RTC_WDG_SUBG_LPAWUR_LCD_LCSC)
209+ PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC_WDG_SUBG_LPAWUR_LCD_LCSC ;
210+ PeriphClkInit .RTCWDGSUBGLPAWURLCDLCSCClockSelection = RCC_RTC_WDG_SUBG_LPAWUR_LCD_LCSC_CLKSOURCE_LSE ;
211+ } else if (source == HSI_CLOCK ) {
212+ /* Enable the clock if not already set by user */
213+ enableClock (HSI_CLOCK );
214+ PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC_WDG_SUBG_LPAWUR_LCD_LCSC ;
215+ PeriphClkInit .RTCWDGSUBGLPAWURLCDLCSCClockSelection = RCC_RTC_WDG_SUBG_LPAWUR_LCD_LCSC_CLKSOURCE_DIV512 ;
208216#else
209217 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC ;
210218 PeriphClkInit .RTCClockSelection = RCC_RTCCLKSOURCE_LSE ;
@@ -251,6 +259,9 @@ static void RTC_initClock(sourceClock_t source)
251259#if defined(RCC_PERIPHCLK_RTC_WDG_BLEWKUP )
252260 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC_WDG_BLEWKUP ;
253261 PeriphClkInit .RTCWDGBLEWKUPClockSelection = RCC_RTC_WDG_BLEWKUP_CLKSOURCE_LSI ;
262+ #elif defined(RCC_PERIPHCLK_RTC_WDG_SUBG_LPAWUR_LCD_LCSC )
263+ PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC_WDG_SUBG_LPAWUR_LCD_LCSC ;
264+ PeriphClkInit .RTCWDGSUBGLPAWURLCDLCSCClockSelection = RCC_RTC_WDG_SUBG_LPAWUR_LCD_LCSC_CLKSOURCE_LSI ;
254265#else
255266 PeriphClkInit .PeriphClockSelection = RCC_PERIPHCLK_RTC ;
256267 PeriphClkInit .RTCClockSelection = RCC_RTCCLKSOURCE_LSI ;
@@ -536,6 +547,13 @@ bool RTC_init(hourFormat_t format, binaryMode_t mode, sourceClock_t source, bool
536547 (oldRtcClockSource == RCC_RTC_WDG_BLEWKUP_CLKSOURCE_HSI64M_DIV2048 ) ? HSI_CLOCK :
537548 // default case corresponding to no clock source
538549 0xFFFFFFFF );
550+ #elif defined(__HAL_RCC_GET_RTC_SUBG_LPAWUR_LCD_LCSC_CLK_CONFIG )
551+ uint32_t oldRtcClockSource = __HAL_RCC_GET_RTC_SUBG_LPAWUR_LCD_LCSC_CLK_CONFIG ();
552+ oldRtcClockSource = ((oldRtcClockSource == RCC_RTC_WDG_SUBG_LPAWUR_LCD_LCSC_CLKSOURCE_LSE ) ? LSE_CLOCK :
553+ (oldRtcClockSource == RCC_RTC_WDG_SUBG_LPAWUR_LCD_LCSC_CLKSOURCE_LSI ) ? LSI_CLOCK :
554+ (oldRtcClockSource == RCC_RTC_WDG_SUBG_LPAWUR_LCD_LCSC_CLKSOURCE_DIV512 ) ? HSI_CLOCK :
555+ // default case corresponding to no clock source
556+ 0xFFFFFFFF );
539557#else
540558 uint32_t oldRtcClockSource = __HAL_RCC_GET_RTC_SOURCE ();
541559 oldRtcClockSource = ((oldRtcClockSource == RCC_RTCCLKSOURCE_LSE ) ? LSE_CLOCK :
@@ -1223,7 +1241,7 @@ void RTC_Alarm_IRQHandler(void)
12231241 defined(STM32F030xC ) || defined(STM32G0xx ) || defined(STM32H5xx ) || \
12241242 defined(STM32L0xx ) || defined(STM32L5xx ) || defined(STM32U0xx ) || \
12251243 defined(STM32U3xx ) || defined(STM32U5xx ) || defined(STM32WB0x ) || \
1226- defined(STM32WBAxx )
1244+ defined(STM32WBAxx ) || defined( STM32WL3x )
12271245 // In some cases, the same vector is used to manage WakeupTimer,
12281246 // but with a dedicated HAL IRQHandler
12291247 HAL_RTCEx_WakeUpTimerIRQHandler (& RtcHandle );
0 commit comments