diff options
| author | ennyKey <ennyKey@fn.de> | 2024-12-04 17:52:42 +0100 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2025-10-30 12:30:26 +1100 |
| commit | 4efc5e12b94082af16520e73ecdd53a67ceddfcf (patch) | |
| tree | 7757c5bfe4887d3c4cacf3dba6b0335434bd0d38 /ports/stm32/uart.c | |
| parent | e58425a5133399215e3a70bae2add40d78555ef9 (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.c | 16 |
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 |
