@@ -73,6 +73,9 @@ typedef enum {
7373#endif
7474#if defined(LPUART2_BASE )
7575 LPUART2_INDEX ,
76+ #endif
77+ #if defined(LPUART3_BASE )
78+ LPUART3_INDEX ,
7679#endif
7780 UART_NUM
7881} uart_index_t ;
@@ -253,6 +256,15 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
253256 obj -> irq = LPUART2_IRQn ;
254257 }
255258#endif
259+ #if defined(LPUART3_BASE )
260+ else if (obj -> uart == LPUART3 ) {
261+ __HAL_RCC_LPUART3_FORCE_RESET ();
262+ __HAL_RCC_LPUART3_RELEASE_RESET ();
263+ __HAL_RCC_LPUART3_CLK_ENABLE ();
264+ obj -> index = LPUART3_INDEX ;
265+ obj -> irq = LPUART3_IRQn ;
266+ }
267+ #endif
256268#if defined(UART7_BASE )
257269 else if (obj -> uart == UART7 ) {
258270 __HAL_RCC_UART7_FORCE_RESET ();
@@ -362,6 +374,9 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
362374 if ((obj -> uart == LPUART1 )
363375#if defined(LPUART2_BASE )
364376 || (obj -> uart == LPUART2 )
377+ #endif
378+ #if defined(LPUART3_BASE )
379+ || (obj -> uart == LPUART3 )
365380#endif
366381 ) {
367382 if (baudrate <= 9600 ) {
@@ -395,6 +410,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
395410 if (obj -> uart == LPUART2 ) {
396411 __HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_LSE );
397412 }
413+ #endif
414+ #if defined(LPUART3_BASE )
415+ if (obj -> uart == LPUART3 ) {
416+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_LSE );
417+ }
398418#endif
399419 if (uart_rx == NP ) {
400420 if (HAL_HalfDuplex_Init (huart ) == HAL_OK ) {
@@ -412,6 +432,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
412432 if (obj -> uart == LPUART2 ) {
413433 __HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_HSI );
414434 }
435+ #endif
436+ #if defined(LPUART3_BASE )
437+ if (obj -> uart == LPUART3 ) {
438+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_HSI );
439+ }
415440#endif
416441 if (uart_rx == NP ) {
417442 if (HAL_HalfDuplex_Init (huart ) == HAL_OK ) {
@@ -434,6 +459,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
434459 if (obj -> uart == LPUART2 ) {
435460 __HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_PCLK1 );
436461 }
462+ #endif
463+ #if defined(LPUART3_BASE )
464+ if (obj -> uart == LPUART3 ) {
465+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_PCLK1 );
466+ }
437467#endif
438468 if (uart_rx == NP ) {
439469 if (HAL_HalfDuplex_Init (huart ) == HAL_OK ) {
@@ -451,6 +481,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
451481 if (obj -> uart == LPUART2 ) {
452482 __HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_SYSCLK );
453483 }
484+ #endif
485+ #if defined(LPUART3_BASE )
486+ if (obj -> uart == LPUART3 ) {
487+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_SYSCLK );
488+ }
454489#endif
455490 }
456491#endif
@@ -541,6 +576,13 @@ void uart_deinit(serial_t *obj)
541576 __HAL_RCC_LPUART2_CLK_DISABLE ();
542577 break ;
543578#endif
579+ #if defined(LPUART3_BASE )
580+ case LPUART3_INDEX :
581+ __HAL_RCC_LPUART3_FORCE_RESET ();
582+ __HAL_RCC_LPUART3_RELEASE_RESET ();
583+ __HAL_RCC_LPUART3_CLK_DISABLE ();
584+ break ;
585+ #endif
544586#if defined(UART7_BASE )
545587 case UART7_INDEX :
546588 __HAL_RCC_UART7_FORCE_RESET ();
@@ -666,6 +708,13 @@ void uart_config_lowpower(serial_t *obj)
666708 __HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_HSI );
667709 }
668710 break ;
711+ #endif
712+ #if defined(LPUART3_BASE ) && defined(__HAL_RCC_LPUART3_CONFIG )
713+ case LPUART3_INDEX :
714+ if (__HAL_RCC_GET_LPUART3_SOURCE () != RCC_LPUART3CLKSOURCE_HSI ) {
715+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_HSI );
716+ }
717+ break ;
669718#endif
670719 }
671720#if defined(UART_WAKEUP_EXTI_LINE )
@@ -1074,6 +1123,28 @@ void USART4_5_IRQHandler(void)
10741123#endif
10751124#endif
10761125
1126+ /**
1127+ * @brief USART 4 IRQ handler
1128+ * @param None
1129+ * @retval None
1130+ */
1131+ #if defined(STM32U0xx )
1132+ #if defined(USART4_BASE )
1133+ void USART4_IRQHandler (void )
1134+ {
1135+ HAL_NVIC_ClearPendingIRQ (USART4_IRQn );
1136+ if (uart_handlers [UART4_INDEX ] != NULL ) {
1137+ HAL_UART_IRQHandler (uart_handlers [UART4_INDEX ]);
1138+ }
1139+ #if defined(LPUART3_BASE )
1140+ if (uart_handlers [LPUART3_INDEX ] != NULL ) {
1141+ HAL_UART_IRQHandler (uart_handlers [LPUART3_INDEX ]);
1142+ }
1143+ #endif
1144+ }
1145+ #endif
1146+ #endif
1147+
10771148/**
10781149 * @brief USART 5 IRQ handler
10791150 * @param None
0 commit comments