diff options
| author | Damien George <damien@micropython.org> | 2021-07-26 13:03:42 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2021-07-26 13:53:50 +1000 |
| commit | fef21144047201d639b2692e3a55083c7180cb29 (patch) | |
| tree | 3af13cc0b2e1854cc6d7550e9d2367be78b630e9 | |
| parent | ee49ae8f82c22b43777aa9e73a1b7a6825304d13 (diff) | |
stm32/uart: Fix LPUART1 baudrate set/get.
It needs to use a different function because the formula to compute the
baudrate on LPUART1 is different to a normal UART.
Fixes issue #7466.
Signed-off-by: Damien George <damien@micropython.org>
| -rw-r--r-- | ports/stm32/boards/stm32h7xx_hal_conf_base.h | 1 | ||||
| -rw-r--r-- | ports/stm32/boards/stm32l0xx_hal_conf_base.h | 1 | ||||
| -rw-r--r-- | ports/stm32/boards/stm32l4xx_hal_conf_base.h | 1 | ||||
| -rw-r--r-- | ports/stm32/boards/stm32wbxx_hal_conf_base.h | 1 | ||||
| -rw-r--r-- | ports/stm32/uart.c | 19 |
5 files changed, 23 insertions, 0 deletions
diff --git a/ports/stm32/boards/stm32h7xx_hal_conf_base.h b/ports/stm32/boards/stm32h7xx_hal_conf_base.h index c07ae93e3..08928ed59 100644 --- a/ports/stm32/boards/stm32h7xx_hal_conf_base.h +++ b/ports/stm32/boards/stm32h7xx_hal_conf_base.h @@ -54,6 +54,7 @@ #include "stm32h7xx_hal_usart.h" #include "stm32h7xx_hal_wwdg.h" #include "stm32h7xx_ll_adc.h" +#include "stm32h7xx_ll_lpuart.h" #include "stm32h7xx_ll_pwr.h" #include "stm32h7xx_ll_rtc.h" #include "stm32h7xx_ll_usart.h" diff --git a/ports/stm32/boards/stm32l0xx_hal_conf_base.h b/ports/stm32/boards/stm32l0xx_hal_conf_base.h index cc033666a..7b569907e 100644 --- a/ports/stm32/boards/stm32l0xx_hal_conf_base.h +++ b/ports/stm32/boards/stm32l0xx_hal_conf_base.h @@ -47,6 +47,7 @@ #include "stm32l0xx_hal_usart.h" #include "stm32l0xx_hal_wwdg.h" #include "stm32l0xx_ll_adc.h" +#include "stm32l0xx_ll_lpuart.h" #include "stm32l0xx_ll_rtc.h" #include "stm32l0xx_ll_usart.h" diff --git a/ports/stm32/boards/stm32l4xx_hal_conf_base.h b/ports/stm32/boards/stm32l4xx_hal_conf_base.h index 8d77a80a7..4f3a78d50 100644 --- a/ports/stm32/boards/stm32l4xx_hal_conf_base.h +++ b/ports/stm32/boards/stm32l4xx_hal_conf_base.h @@ -51,6 +51,7 @@ #include "stm32l4xx_hal_usart.h" #include "stm32l4xx_hal_wwdg.h" #include "stm32l4xx_ll_adc.h" +#include "stm32l4xx_ll_lpuart.h" #include "stm32l4xx_ll_rtc.h" #include "stm32l4xx_ll_usart.h" diff --git a/ports/stm32/boards/stm32wbxx_hal_conf_base.h b/ports/stm32/boards/stm32wbxx_hal_conf_base.h index 72af0262a..b03ad2686 100644 --- a/ports/stm32/boards/stm32wbxx_hal_conf_base.h +++ b/ports/stm32/boards/stm32wbxx_hal_conf_base.h @@ -42,6 +42,7 @@ #include "stm32wbxx_hal_uart.h" #include "stm32wbxx_hal_usart.h" #include "stm32wbxx_ll_adc.h" +#include "stm32wbxx_ll_lpuart.h" #include "stm32wbxx_ll_rtc.h" #include "stm32wbxx_ll_usart.h" diff --git a/ports/stm32/uart.c b/ports/stm32/uart.c index b15be8533..002b1f168 100644 --- a/ports/stm32/uart.c +++ b/ports/stm32/uart.c @@ -746,6 +746,15 @@ uint32_t uart_get_source_freq(pyb_uart_obj_t *self) { } uint32_t uart_get_baudrate(pyb_uart_obj_t *self) { + #if defined(LPUART1) + if (self->uart_id == PYB_LPUART_1) { + return LL_LPUART_GetBaudRate(self->uartx, uart_get_source_freq(self) + #if defined(STM32H7) || defined(STM32WB) + , self->uartx->PRESC + #endif + ); + } + #endif return LL_USART_GetBaudRate(self->uartx, uart_get_source_freq(self), #if defined(STM32H7) || defined(STM32WB) self->uartx->PRESC, @@ -754,6 +763,16 @@ uint32_t uart_get_baudrate(pyb_uart_obj_t *self) { } void uart_set_baudrate(pyb_uart_obj_t *self, uint32_t baudrate) { + #if defined(LPUART1) + if (self->uart_id == PYB_LPUART_1) { + LL_LPUART_SetBaudRate(self->uartx, uart_get_source_freq(self), + #if defined(STM32H7) || defined(STM32WB) + LL_LPUART_PRESCALER_DIV1, + #endif + baudrate); + return; + } + #endif LL_USART_SetBaudRate(self->uartx, uart_get_source_freq(self), #if defined(STM32H7) || defined(STM32WB) LL_USART_PRESCALER_DIV1, |
