From 073b70f7dcce1abde3e5364f7783b38f6d4e0c96 Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Wed, 17 Jul 2024 08:34:23 +0200 Subject: [PATCH] [4.5.1] fix at32 serial bidir pp od init and smart audio (#13764) (#13771) fix at32 serial bidir pp od init and smart audio (#13764) include fix for F4 and G4 as well Co-authored-by: Benedikt Kleiner Co-authored-by: Eike Ahmels --- src/main/drivers/at32/serial_uart_at32f43x.c | 2 +- src/main/drivers/stm32/serial_uart_stm32f4xx.c | 4 +++- src/main/drivers/stm32/serial_uart_stm32g4xx.c | 2 +- src/main/io/vtx_smartaudio.c | 2 ++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/drivers/at32/serial_uart_at32f43x.c b/src/main/drivers/at32/serial_uart_at32f43x.c index d80c84b086..eb06a663d5 100644 --- a/src/main/drivers/at32/serial_uart_at32f43x.c +++ b/src/main/drivers/at32/serial_uart_at32f43x.c @@ -391,7 +391,7 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode, GPIO_MODE_MUX, GPIO_DRIVE_STRENGTH_STRONGER, ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_OUTPUT_PUSH_PULL : GPIO_OUTPUT_OPEN_DRAIN, - (options & SERIAL_INVERTED) ? GPIO_PULL_DOWN : GPIO_PULL_UP + ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_PULL_DOWN : GPIO_PULL_UP ); IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); IOConfigGPIOAF(txIO, ioCfg, uartdev->tx.af); diff --git a/src/main/drivers/stm32/serial_uart_stm32f4xx.c b/src/main/drivers/stm32/serial_uart_stm32f4xx.c index 6dfa08cc86..b2790df6a1 100644 --- a/src/main/drivers/stm32/serial_uart_stm32f4xx.c +++ b/src/main/drivers/stm32/serial_uart_stm32f4xx.c @@ -337,7 +337,9 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode, if (options & SERIAL_BIDIR) { IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); - IOConfigGPIOAF(txIO, ((options & SERIAL_BIDIR_PP) || (options & SERIAL_BIDIR_PP_PD)) ? IOCFG_AF_PP : IOCFG_AF_OD, hardware->af); + IOConfigGPIOAF(txIO, (options & SERIAL_BIDIR_PP_PD) ? IOCFG_AF_PP_PD + : (options & SERIAL_BIDIR_PP) ? IOCFG_AF_PP + : IOCFG_AF_OD, hardware->af); } else { if ((mode & MODE_TX) && txIO) { IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); diff --git a/src/main/drivers/stm32/serial_uart_stm32g4xx.c b/src/main/drivers/stm32/serial_uart_stm32g4xx.c index f98dfcac7a..295fa23b96 100644 --- a/src/main/drivers/stm32/serial_uart_stm32g4xx.c +++ b/src/main/drivers/stm32/serial_uart_stm32g4xx.c @@ -300,7 +300,7 @@ uartPort_t *serialUART(UARTDevice_e device, uint32_t baudRate, portMode_e mode, ioConfig_t ioCfg = IO_CONFIG( ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_MODE_AF_PP : GPIO_MODE_AF_OD, GPIO_SPEED_FREQ_HIGH, - (options & SERIAL_INVERTED) ? GPIO_PULLDOWN : GPIO_PULLUP + ((options & SERIAL_INVERTED) || (options & SERIAL_BIDIR_PP_PD)) ? GPIO_PULLDOWN : GPIO_PULLUP ); IOInit(txIO, OWNER_SERIAL_TX, RESOURCE_INDEX(device)); diff --git a/src/main/io/vtx_smartaudio.c b/src/main/io/vtx_smartaudio.c index 8efc3b4956..a762de1d53 100644 --- a/src/main/io/vtx_smartaudio.c +++ b/src/main/io/vtx_smartaudio.c @@ -497,6 +497,7 @@ static void saReceiveFrame(uint8_t c) static void saSendFrame(uint8_t *buf, int len) { if (!IS_RC_MODE_ACTIVE(BOXVTXCONTROLDISABLE)) { +#ifndef AT32F4 switch (smartAudioSerialPort->identifier) { case SERIAL_PORT_SOFTSERIAL1: case SERIAL_PORT_SOFTSERIAL2: @@ -508,6 +509,7 @@ static void saSendFrame(uint8_t *buf, int len) serialWrite(smartAudioSerialPort, 0x00); // Generate 1st start byte break; } +#endif //AT32F4 for (int i = 0 ; i < len ; i++) { serialWrite(smartAudioSerialPort, buf[i]);