summaryrefslogtreecommitdiff
path: root/ports/stm32/uart.c
diff options
context:
space:
mode:
authorennyKey <ennyKey@fn.de>2024-12-04 17:52:42 +0100
committerDamien George <damien@micropython.org>2025-10-30 12:30:26 +1100
commit4efc5e12b94082af16520e73ecdd53a67ceddfcf (patch)
tree7757c5bfe4887d3c4cacf3dba6b0335434bd0d38 /ports/stm32/uart.c
parente58425a5133399215e3a70bae2add40d78555ef9 (diff)
stm32/machine_uart: Implement TX/RX inversion parameter for UART on H7.
Implemented the keyword-only parameter `invert` for the `UART.init` method in accordance with the docs: - added constants `UART.INV_TX` and `UART.INV_RX` - added the new `invert` keyword parameter to the `uart_init` function - adapted the `uart_init` call - added invert setting to `uart_print` output The feature applies only to STM32H7. Signed-off-by: ennyKey <ennyKey@fn.de>
Diffstat (limited to 'ports/stm32/uart.c')
-rw-r--r--ports/stm32/uart.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/ports/stm32/uart.c b/ports/stm32/uart.c
index 73e36881a..f1637fd49 100644
--- a/ports/stm32/uart.c
+++ b/ports/stm32/uart.c
@@ -265,7 +265,7 @@ bool uart_exists(int uart_id) {
// assumes Init parameters have been set up correctly
bool uart_init(machine_uart_obj_t *uart_obj,
- uint32_t baudrate, uint32_t bits, uint32_t parity, uint32_t stop, uint32_t flow) {
+ uint32_t baudrate, uint32_t bits, uint32_t parity, uint32_t stop, uint32_t flow, uint32_t invert) {
USART_TypeDef *UARTx;
IRQn_Type irqn;
uint8_t uart_fn = AF_FN_UART;
@@ -677,6 +677,20 @@ bool uart_init(machine_uart_obj_t *uart_obj,
huart.Init.ClockPrescaler = UART_PRESCALER_DIV16;
#endif
+ #if defined(STM32H7)
+ huart.AdvancedInit.AdvFeatureInit = (UART_ADVFEATURE_TXINVERT_INIT | UART_ADVFEATURE_RXINVERT_INIT);
+ if (invert & UART_ADVFEATURE_RXINVERT_INIT) {
+ huart.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
+ } else {
+ huart.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_DISABLE;
+ }
+ if (invert & UART_ADVFEATURE_TXINVERT_INIT) {
+ huart.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;
+ } else {
+ huart.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_DISABLE;
+ }
+ #endif
+
#if defined(STM32G4) || defined(STM32H7) || defined(STM32N6) // WB also has a fifo..
huart.FifoMode = UART_FIFOMODE_ENABLE;
#endif