@@ -73,6 +73,9 @@ typedef enum {
73
73
#endif
74
74
#if defined(LPUART2_BASE )
75
75
LPUART2_INDEX ,
76
+ #endif
77
+ #if defined(LPUART3_BASE )
78
+ LPUART3_INDEX ,
76
79
#endif
77
80
UART_NUM
78
81
} uart_index_t ;
@@ -253,6 +256,15 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
253
256
obj -> irq = LPUART2_IRQn ;
254
257
}
255
258
#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
256
268
#if defined(UART7_BASE )
257
269
else if (obj -> uart == UART7 ) {
258
270
__HAL_RCC_UART7_FORCE_RESET ();
@@ -362,6 +374,9 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
362
374
if ((obj -> uart == LPUART1 )
363
375
#if defined(LPUART2_BASE )
364
376
|| (obj -> uart == LPUART2 )
377
+ #endif
378
+ #if defined(LPUART3_BASE )
379
+ || (obj -> uart == LPUART3 )
365
380
#endif
366
381
) {
367
382
if (baudrate <= 9600 ) {
@@ -395,6 +410,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
395
410
if (obj -> uart == LPUART2 ) {
396
411
__HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_LSE );
397
412
}
413
+ #endif
414
+ #if defined(LPUART3_BASE )
415
+ if (obj -> uart == LPUART3 ) {
416
+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_LSE );
417
+ }
398
418
#endif
399
419
if (uart_rx == NP ) {
400
420
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
412
432
if (obj -> uart == LPUART2 ) {
413
433
__HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_HSI );
414
434
}
435
+ #endif
436
+ #if defined(LPUART3_BASE )
437
+ if (obj -> uart == LPUART3 ) {
438
+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_HSI );
439
+ }
415
440
#endif
416
441
if (uart_rx == NP ) {
417
442
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
434
459
if (obj -> uart == LPUART2 ) {
435
460
__HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_PCLK1 );
436
461
}
462
+ #endif
463
+ #if defined(LPUART3_BASE )
464
+ if (obj -> uart == LPUART3 ) {
465
+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_PCLK1 );
466
+ }
437
467
#endif
438
468
if (uart_rx == NP ) {
439
469
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
451
481
if (obj -> uart == LPUART2 ) {
452
482
__HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_SYSCLK );
453
483
}
484
+ #endif
485
+ #if defined(LPUART3_BASE )
486
+ if (obj -> uart == LPUART3 ) {
487
+ __HAL_RCC_LPUART3_CONFIG (RCC_LPUART3CLKSOURCE_SYSCLK );
488
+ }
454
489
#endif
455
490
}
456
491
#endif
@@ -541,6 +576,13 @@ void uart_deinit(serial_t *obj)
541
576
__HAL_RCC_LPUART2_CLK_DISABLE ();
542
577
break ;
543
578
#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
544
586
#if defined(UART7_BASE )
545
587
case UART7_INDEX :
546
588
__HAL_RCC_UART7_FORCE_RESET ();
@@ -666,6 +708,13 @@ void uart_config_lowpower(serial_t *obj)
666
708
__HAL_RCC_LPUART2_CONFIG (RCC_LPUART2CLKSOURCE_HSI );
667
709
}
668
710
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 ;
669
718
#endif
670
719
}
671
720
#if defined(UART_WAKEUP_EXTI_LINE )
@@ -1074,6 +1123,28 @@ void USART4_5_IRQHandler(void)
1074
1123
#endif
1075
1124
#endif
1076
1125
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
+
1077
1148
/**
1078
1149
* @brief USART 5 IRQ handler
1079
1150
* @param None
0 commit comments