@@ -490,7 +490,13 @@ bool uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
490490 enableClock (LSE_CLOCK );
491491 if (LL_RCC_LSE_IsReady ()) {
492492 if (obj -> uart == LPUART1 ) {
493+ #if defined(__HAL_RCC_LPUART1_CONFIG )
493494 __HAL_RCC_LPUART1_CONFIG (RCC_LPUART1CLKSOURCE_LSE );
495+ #elif defined(__HAL_RCC_LPUART1_CLK_CONFIG )
496+ __HAL_RCC_LPUART1_CLK_CONFIG (RCC_LPUART1_CLKSOURCE_LSE );
497+ #else
498+ #error "LPUART1 clock source config not defined"
499+ #endif
494500 }
495501#if defined(LPUART2_BASE )
496502 if (obj -> uart == LPUART2 ) {
@@ -511,6 +517,7 @@ bool uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
511517 }
512518 }
513519 }
520+ #if defined(__HAL_RCC_LPUART1_CONFIG )
514521 if (LL_RCC_HSI_IsReady ()) {
515522 if (obj -> uart == LPUART1 ) {
516523 __HAL_RCC_LPUART1_CONFIG (RCC_LPUART1CLKSOURCE_HSI );
@@ -533,13 +540,16 @@ bool uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
533540 return true;
534541 }
535542 }
543+ #endif /* __HAL_RCC_LPUART1_CONFIG */
536544 if (obj -> uart == LPUART1 ) {
537545#if defined(RCC_LPUART1CLKSOURCE_CSI )
538546 __HAL_RCC_LPUART1_CONFIG (RCC_LPUART1CLKSOURCE_CSI );
539547#elif defined(RCC_LPUART1CLKSOURCE_PCLK1 )
540548 __HAL_RCC_LPUART1_CONFIG (RCC_LPUART1CLKSOURCE_PCLK1 );
541549#elif defined(RCC_LPUART1CLKSOURCE_PCLK3 )
542550 __HAL_RCC_LPUART1_CONFIG (RCC_LPUART1CLKSOURCE_PCLK3 );
551+ #elif defined(RCC_LPUART1_CLKSOURCE_16M )
552+ __HAL_RCC_LPUART1_CLK_CONFIG (RCC_LPUART1_CLKSOURCE_16M );
543553#endif
544554 }
545555#if defined(LPUART2_BASE )
@@ -756,17 +766,24 @@ void uart_config_lowpower(serial_t *obj)
756766 if (obj == NULL ) {
757767 return ;
758768 }
759- /* Ensure HSI clock is enable */
769+ /* Ensure clock is enable */
770+ #if defined(STM32WB0x )
771+ enableClock (LSE_CLOCK );
772+ #else
760773 enableClock (HSI_CLOCK );
774+ #endif
761775
762776 hsem_lock (CFG_HW_RCC_CRRCR_CCIPR_SEMID , HSEM_LOCK_DEFAULT_RETRY );
763777 /* Configure HSI as source clock for low power wakeup clock */
764778 switch (obj -> index ) {
765779#if defined(USART1_BASE )
766780 case UART1_INDEX :
781+ /* STM32WB0x direct clock CLK_16M */
782+ #if defined(__HAL_RCC_GET_USART1_SOURCE )
767783 if (__HAL_RCC_GET_USART1_SOURCE () != RCC_USART1CLKSOURCE_HSI ) {
768784 __HAL_RCC_USART1_CONFIG (RCC_USART1CLKSOURCE_HSI );
769785 }
786+ #endif
770787 break ;
771788#endif
772789#if defined(USART2_BASE ) && defined(__HAL_RCC_USART2_CONFIG )
@@ -797,14 +814,21 @@ void uart_config_lowpower(serial_t *obj)
797814 }
798815 break ;
799816#endif
800- #if defined(LPUART1_BASE ) && defined(__HAL_RCC_LPUART1_CONFIG )
817+ #if defined(LPUART1_BASE ) && (defined(__HAL_RCC_LPUART1_CONFIG ) || defined(__HAL_RCC_LPUART1_CLK_CONFIG ))
818+ /* LPUART1 is used for low power wakeup */
801819 case LPUART1_INDEX :
820+ #if defined(__HAL_RCC_LPUART1_CONFIG )
802821#ifdef __HAL_RCC_LPUART1_CLKAM_ENABLE
803822 __HAL_RCC_LPUART1_CLKAM_ENABLE ();
804823#endif
805824 if (__HAL_RCC_GET_LPUART1_SOURCE () != RCC_LPUART1CLKSOURCE_HSI ) {
806825 __HAL_RCC_LPUART1_CONFIG (RCC_LPUART1CLKSOURCE_HSI );
807826 }
827+ #elif defined(__HAL_RCC_LPUART1_CLK_CONFIG )
828+ if (__HAL_RCC_GET_LPUART1_CLK_CONFIG () != RCC_LPUART1_CLKSOURCE_LSE ) {
829+ __HAL_RCC_LPUART1_CLK_CONFIG (RCC_LPUART1_CLKSOURCE_LSE );
830+ }
831+ #endif
808832 break ;
809833#endif
810834#if defined(LPUART2_BASE ) && defined(__HAL_RCC_LPUART2_CONFIG )
0 commit comments