diff options
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/arch/arm/src/stm32/stm32_serial.c | 21 | ||||
-rw-r--r-- | nuttx/drivers/serial/serial.c | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_serial.c b/nuttx/arch/arm/src/stm32/stm32_serial.c index 0868c3cd3..80c4ce357 100644 --- a/nuttx/arch/arm/src/stm32/stm32_serial.c +++ b/nuttx/arch/arm/src/stm32/stm32_serial.c @@ -1307,6 +1307,27 @@ static int up_ioctl(struct file *filep, int cmd, unsigned long arg) } break; + /* Set RS485 mode */ + case TIOCSRS485: + { + /* Change the TX port to be open-drain/push-pull */ + if (arg == SER_RS485_ENABLED) { + stm32_configgpio(priv->tx_gpio | GPIO_OPENDRAIN); + } else { + stm32_configgpio(priv->tx_gpio | GPIO_PUSHPULL); + } + + /* Enable/disable half-duplex mode */ + uint32_t cr = up_serialin(priv, STM32_USART_CR3_OFFSET); + if (arg == SER_RS485_ENABLED) { + cr |= (USART_CR3_HDSEL); + } else { + cr &= ~(USART_CR3_HDSEL); + } + up_serialout(priv, STM32_USART_CR3_OFFSET, cr); + } + break; + #ifdef CONFIG_SERIAL_TERMIOS case TCGETS: { diff --git a/nuttx/drivers/serial/serial.c b/nuttx/drivers/serial/serial.c index c650da5db..c31d12eee 100644 --- a/nuttx/drivers/serial/serial.c +++ b/nuttx/drivers/serial/serial.c @@ -687,6 +687,7 @@ static int uart_ioctl(FAR struct file *filep, int cmd, unsigned long arg) *(int *)arg = count; } + break; #ifdef CONFIG_SERIAL_TERMIOS case TCGETS: |