Skip to content

Commit 90a9263

Browse files
committed
stm32/uart: Enable UART clock in low power modes.
Prevents UART clock from stopping in low power modes (such as WFI). Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
1 parent b1d5c65 commit 90a9263

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

ports/stm32/uart.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
292292
pins_pull[3] = MICROPY_HW_UART1_CTS_PULL;
293293
#endif
294294
__HAL_RCC_USART1_CLK_ENABLE();
295+
__HAL_RCC_USART1_CLK_SLEEP_ENABLE();
295296
break;
296297
#endif
297298

@@ -323,6 +324,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
323324
pins_pull[3] = MICROPY_HW_UART2_CTS_PULL;
324325
#endif
325326
__HAL_RCC_USART2_CLK_ENABLE();
327+
__HAL_RCC_USART2_CLK_SLEEP_ENABLE();
326328
break;
327329
#endif
328330

@@ -356,6 +358,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
356358
pins_pull[3] = MICROPY_HW_UART3_CTS_PULL;
357359
#endif
358360
__HAL_RCC_USART3_CLK_ENABLE();
361+
__HAL_RCC_USART3_CLK_SLEEP_ENABLE();
359362
break;
360363
#endif
361364

@@ -366,18 +369,22 @@ bool uart_init(machine_uart_obj_t *uart_obj,
366369
UARTx = USART4;
367370
irqn = USART3_8_IRQn;
368371
__HAL_RCC_USART4_CLK_ENABLE();
372+
__HAL_RCC_USART4_CLK_SLEEP_ENABLE();
369373
#elif defined(STM32L0)
370374
UARTx = USART4;
371375
irqn = USART4_5_IRQn;
372376
__HAL_RCC_USART4_CLK_ENABLE();
377+
__HAL_RCC_USART4_CLK_SLEEP_ENABLE();
373378
#elif defined(STM32G0)
374379
UARTx = USART4;
375380
irqn = USART3_4_5_6_LPUART1_IRQn;
376381
__HAL_RCC_USART4_CLK_ENABLE();
382+
__HAL_RCC_USART4_CLK_SLEEP_ENABLE();
377383
#else
378384
UARTx = UART4;
379385
irqn = UART4_IRQn;
380386
__HAL_RCC_UART4_CLK_ENABLE();
387+
__HAL_RCC_UART4_CLK_SLEEP_ENABLE();
381388
#endif
382389
pins[0] = MICROPY_HW_UART4_TX;
383390
pins[1] = MICROPY_HW_UART4_RX;
@@ -407,18 +414,22 @@ bool uart_init(machine_uart_obj_t *uart_obj,
407414
UARTx = USART5;
408415
irqn = USART3_8_IRQn;
409416
__HAL_RCC_USART5_CLK_ENABLE();
417+
__HAL_RCC_USART5_CLK_SLEEP_ENABLE();
410418
#elif defined(STM32L0)
411419
UARTx = USART5;
412420
irqn = USART4_5_IRQn;
413421
__HAL_RCC_USART5_CLK_ENABLE();
422+
__HAL_RCC_USART5_CLK_SLEEP_ENABLE();
414423
#elif defined(STM32G0)
415424
UARTx = USART5;
416425
irqn = USART3_4_5_6_LPUART1_IRQn;
417426
__HAL_RCC_USART5_CLK_ENABLE();
427+
__HAL_RCC_USART5_CLK_SLEEP_ENABLE();
418428
#else
419429
UARTx = UART5;
420430
irqn = UART5_IRQn;
421431
__HAL_RCC_UART5_CLK_ENABLE();
432+
__HAL_RCC_UART5_CLK_SLEEP_ENABLE();
422433
#endif
423434
pins[0] = MICROPY_HW_UART5_TX;
424435
pins[1] = MICROPY_HW_UART5_RX;
@@ -471,6 +482,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
471482
pins_pull[3] = MICROPY_HW_UART6_CTS_PULL;
472483
#endif
473484
__HAL_RCC_USART6_CLK_ENABLE();
485+
__HAL_RCC_USART6_CLK_SLEEP_ENABLE();
474486
break;
475487
#endif
476488

@@ -481,10 +493,12 @@ bool uart_init(machine_uart_obj_t *uart_obj,
481493
UARTx = USART7;
482494
irqn = USART3_8_IRQn;
483495
__HAL_RCC_USART7_CLK_ENABLE();
496+
__HAL_RCC_USART7_CLK_SLEEP_ENABLE();
484497
#else
485498
UARTx = UART7;
486499
irqn = UART7_IRQn;
487500
__HAL_RCC_UART7_CLK_ENABLE();
501+
__HAL_RCC_UART7_CLK_SLEEP_ENABLE();
488502
#endif
489503
pins[0] = MICROPY_HW_UART7_TX;
490504
pins[1] = MICROPY_HW_UART7_RX;
@@ -514,10 +528,12 @@ bool uart_init(machine_uart_obj_t *uart_obj,
514528
UARTx = USART8;
515529
irqn = USART3_8_IRQn;
516530
__HAL_RCC_USART8_CLK_ENABLE();
531+
__HAL_RCC_USART8_CLK_SLEEP_ENABLE();
517532
#else
518533
UARTx = UART8;
519534
irqn = UART8_IRQn;
520535
__HAL_RCC_UART8_CLK_ENABLE();
536+
__HAL_RCC_UART8_CLK_SLEEP_ENABLE();
521537
#endif
522538
pins[0] = MICROPY_HW_UART8_TX;
523539
pins[1] = MICROPY_HW_UART8_RX;
@@ -546,6 +562,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
546562
UARTx = UART9;
547563
irqn = UART9_IRQn;
548564
__HAL_RCC_UART9_CLK_ENABLE();
565+
__HAL_RCC_UART9_CLK_SLEEP_ENABLE();
549566
pins[0] = MICROPY_HW_UART9_TX;
550567
pins[1] = MICROPY_HW_UART9_RX;
551568
#if defined(MICROPY_HW_UART9_RX_PULL)
@@ -561,10 +578,12 @@ bool uart_init(machine_uart_obj_t *uart_obj,
561578
UARTx = UART10;
562579
irqn = UART10_IRQn;
563580
__HAL_RCC_UART10_CLK_ENABLE();
581+
__HAL_RCC_UART10_CLK_SLEEP_ENABLE();
564582
#else
565583
UARTx = USART10;
566584
irqn = USART10_IRQn;
567585
__HAL_RCC_USART10_CLK_ENABLE();
586+
__HAL_RCC_USART10_CLK_SLEEP_ENABLE();
568587
#endif
569588
pins[0] = MICROPY_HW_UART10_TX;
570589
pins[1] = MICROPY_HW_UART10_RX;
@@ -603,6 +622,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
603622
pins_pull[3] = MICROPY_HW_LPUART1_CTS_PULL;
604623
#endif
605624
__HAL_RCC_LPUART1_CLK_ENABLE();
625+
__HAL_RCC_LPUART1_CLK_SLEEP_ENABLE();
606626
break;
607627
#endif
608628

@@ -633,6 +653,7 @@ bool uart_init(machine_uart_obj_t *uart_obj,
633653
pins_pull[3] = MICROPY_HW_LPUART2_CTS_PULL;
634654
#endif
635655
__HAL_RCC_LPUART2_CLK_ENABLE();
656+
__HAL_RCC_LPUART2_CLK_SLEEP_ENABLE();
636657
break;
637658
#endif
638659

@@ -770,6 +791,7 @@ void uart_deinit(machine_uart_obj_t *self) {
770791
__HAL_RCC_USART1_FORCE_RESET();
771792
__HAL_RCC_USART1_RELEASE_RESET();
772793
__HAL_RCC_USART1_CLK_DISABLE();
794+
__HAL_RCC_USART1_CLK_SLEEP_DISABLE();
773795
#if defined(USART2)
774796
} else if (self->uart_id == 2) {
775797
#if defined(STM32G0)
@@ -780,6 +802,7 @@ void uart_deinit(machine_uart_obj_t *self) {
780802
__HAL_RCC_USART2_FORCE_RESET();
781803
__HAL_RCC_USART2_RELEASE_RESET();
782804
__HAL_RCC_USART2_CLK_DISABLE();
805+
__HAL_RCC_USART2_CLK_SLEEP_DISABLE();
783806
#endif
784807
#if defined(USART3)
785808
} else if (self->uart_id == 3) {
@@ -791,86 +814,99 @@ void uart_deinit(machine_uart_obj_t *self) {
791814
__HAL_RCC_USART3_FORCE_RESET();
792815
__HAL_RCC_USART3_RELEASE_RESET();
793816
__HAL_RCC_USART3_CLK_DISABLE();
817+
__HAL_RCC_USART3_CLK_SLEEP_DISABLE();
794818
#endif
795819
#if defined(UART4)
796820
} else if (self->uart_id == 4) {
797821
HAL_NVIC_DisableIRQ(UART4_IRQn);
798822
__HAL_RCC_UART4_FORCE_RESET();
799823
__HAL_RCC_UART4_RELEASE_RESET();
800824
__HAL_RCC_UART4_CLK_DISABLE();
825+
__HAL_RCC_UART4_CLK_SLEEP_DISABLE();
801826
#endif
802827
#if defined(USART4)
803828
} else if (self->uart_id == 4) {
804829
__HAL_RCC_USART4_FORCE_RESET();
805830
__HAL_RCC_USART4_RELEASE_RESET();
806831
__HAL_RCC_USART4_CLK_DISABLE();
832+
__HAL_RCC_USART4_CLK_SLEEP_DISABLE();
807833
#endif
808834
#if defined(UART5)
809835
} else if (self->uart_id == 5) {
810836
HAL_NVIC_DisableIRQ(UART5_IRQn);
811837
__HAL_RCC_UART5_FORCE_RESET();
812838
__HAL_RCC_UART5_RELEASE_RESET();
813839
__HAL_RCC_UART5_CLK_DISABLE();
840+
__HAL_RCC_UART5_CLK_SLEEP_DISABLE();
814841
#endif
815842
#if defined(USART5)
816843
} else if (self->uart_id == 5) {
817844
__HAL_RCC_USART5_FORCE_RESET();
818845
__HAL_RCC_USART5_RELEASE_RESET();
819846
__HAL_RCC_USART5_CLK_DISABLE();
847+
__HAL_RCC_USART5_CLK_SLEEP_DISABLE();
820848
#endif
821849
#if defined(UART6)
822850
} else if (self->uart_id == 6) {
823851
HAL_NVIC_DisableIRQ(USART6_IRQn);
824852
__HAL_RCC_USART6_FORCE_RESET();
825853
__HAL_RCC_USART6_RELEASE_RESET();
826854
__HAL_RCC_USART6_CLK_DISABLE();
855+
__HAL_RCC_USART6_CLK_SLEEP_DISABLE();
827856
#endif
828857
#if defined(UART7)
829858
} else if (self->uart_id == 7) {
830859
HAL_NVIC_DisableIRQ(UART7_IRQn);
831860
__HAL_RCC_UART7_FORCE_RESET();
832861
__HAL_RCC_UART7_RELEASE_RESET();
833862
__HAL_RCC_UART7_CLK_DISABLE();
863+
__HAL_RCC_UART7_CLK_SLEEP_DISABLE();
834864
#endif
835865
#if defined(USART7)
836866
} else if (self->uart_id == 7) {
837867
__HAL_RCC_USART7_FORCE_RESET();
838868
__HAL_RCC_USART7_RELEASE_RESET();
839869
__HAL_RCC_USART7_CLK_DISABLE();
870+
__HAL_RCC_USART7_CLK_SLEEP_DISABLE();
840871
#endif
841872
#if defined(UART8)
842873
} else if (self->uart_id == 8) {
843874
HAL_NVIC_DisableIRQ(UART8_IRQn);
844875
__HAL_RCC_UART8_FORCE_RESET();
845876
__HAL_RCC_UART8_RELEASE_RESET();
846877
__HAL_RCC_UART8_CLK_DISABLE();
878+
__HAL_RCC_UART8_CLK_SLEEP_DISABLE();
847879
#endif
848880
#if defined(USART8)
849881
} else if (self->uart_id == 8) {
850882
__HAL_RCC_USART8_FORCE_RESET();
851883
__HAL_RCC_USART8_RELEASE_RESET();
852884
__HAL_RCC_USART8_CLK_DISABLE();
885+
__HAL_RCC_USART8_CLK_SLEEP_DISABLE();
853886
#endif
854887
#if defined(UART9)
855888
} else if (self->uart_id == 9) {
856889
HAL_NVIC_DisableIRQ(UART9_IRQn);
857890
__HAL_RCC_UART9_FORCE_RESET();
858891
__HAL_RCC_UART9_RELEASE_RESET();
859892
__HAL_RCC_UART9_CLK_DISABLE();
893+
__HAL_RCC_UART9_CLK_SLEEP_DISABLE();
860894
#endif
861895
#if defined(UART10)
862896
} else if (self->uart_id == 10) {
863897
HAL_NVIC_DisableIRQ(UART10_IRQn);
864898
__HAL_RCC_UART10_FORCE_RESET();
865899
__HAL_RCC_UART10_RELEASE_RESET();
866900
__HAL_RCC_UART10_CLK_DISABLE();
901+
__HAL_RCC_UART10_CLK_SLEEP_DISABLE();
867902
#endif
868903
#if defined(USART10)
869904
} else if (self->uart_id == 10) {
870905
HAL_NVIC_DisableIRQ(USART10_IRQn);
871906
__HAL_RCC_USART10_FORCE_RESET();
872907
__HAL_RCC_USART10_RELEASE_RESET();
873908
__HAL_RCC_USART10_CLK_DISABLE();
909+
__HAL_RCC_USART10_CLK_SLEEP_DISABLE();
874910
#endif
875911
#if defined(LPUART1)
876912
} else if (self->uart_id == PYB_LPUART_1) {
@@ -882,6 +918,7 @@ void uart_deinit(machine_uart_obj_t *self) {
882918
__HAL_RCC_LPUART1_FORCE_RESET();
883919
__HAL_RCC_LPUART1_RELEASE_RESET();
884920
__HAL_RCC_LPUART1_CLK_DISABLE();
921+
__HAL_RCC_LPUART1_CLK_SLEEP_DISABLE();
885922
#endif
886923
#if defined(LPUART2)
887924
} else if (self->uart_id == PYB_LPUART_2) {
@@ -893,6 +930,7 @@ void uart_deinit(machine_uart_obj_t *self) {
893930
__HAL_RCC_LPUART2_FORCE_RESET();
894931
__HAL_RCC_LPUART2_RELEASE_RESET();
895932
__HAL_RCC_LPUART2_CLK_DISABLE();
933+
__HAL_RCC_LPUART2_CLK_SLEEP_DISABLE();
896934
#endif
897935
}
898936
}

0 commit comments

Comments
 (0)