summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-07-26 13:03:42 +1000
committerDamien George <damien@micropython.org>2021-07-26 13:53:50 +1000
commitfef21144047201d639b2692e3a55083c7180cb29 (patch)
tree3af13cc0b2e1854cc6d7550e9d2367be78b630e9
parentee49ae8f82c22b43777aa9e73a1b7a6825304d13 (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.h1
-rw-r--r--ports/stm32/boards/stm32l0xx_hal_conf_base.h1
-rw-r--r--ports/stm32/boards/stm32l4xx_hal_conf_base.h1
-rw-r--r--ports/stm32/boards/stm32wbxx_hal_conf_base.h1
-rw-r--r--ports/stm32/uart.c19
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,