diff --git a/bsp/stm32f0x/drivers/usart.c b/bsp/stm32f0x/drivers/usart.c index 0c4aa15821..56e39f1c94 100644 --- a/bsp/stm32f0x/drivers/usart.c +++ b/bsp/stm32f0x/drivers/usart.c @@ -97,8 +97,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while (!(uart->uart_device->ISR & USART_FLAG_TXE)); + USART_ClearFlag(uart->uart_device,USART_FLAG_TC); uart->uart_device->TDR = c; + while (!(uart->uart_device->ISR & USART_FLAG_TC)); return 1; } diff --git a/bsp/stm32f107/drivers/usart.c b/bsp/stm32f107/drivers/usart.c index c1bdd1b9be..e6a7d59535 100644 --- a/bsp/stm32f107/drivers/usart.c +++ b/bsp/stm32f107/drivers/usart.c @@ -124,6 +124,7 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; + USART_ClearFlag(uart->uart_device,USART_FLAG_TC); uart->uart_device->DR = c; while (!(uart->uart_device->SR & USART_FLAG_TC)); diff --git a/bsp/stm32f10x-HAL/drivers/drv_usart.c b/bsp/stm32f10x-HAL/drivers/drv_usart.c index 2650469921..bd6b6cd984 100644 --- a/bsp/stm32f10x-HAL/drivers/drv_usart.c +++ b/bsp/stm32f10x-HAL/drivers/drv_usart.c @@ -113,8 +113,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) struct stm32_uart *uart; RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while (__HAL_UART_GET_FLAG(&uart->huart, UART_FLAG_TXE) == RESET); + __HAL_UART_CLEAR_FLAG(&(uart->huart), UART_FLAG_TC); uart->huart.Instance->DR = c; + while (__HAL_UART_GET_FLAG(&(uart->huart), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32f10x/drivers/usart.c b/bsp/stm32f10x/drivers/usart.c index 18059bf1dc..b3960d749a 100644 --- a/bsp/stm32f10x/drivers/usart.c +++ b/bsp/stm32f10x/drivers/usart.c @@ -100,8 +100,6 @@ static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_c /* Enable USART */ USART_Cmd(uart->uart_device, ENABLE); - - USART_ClearFlag(uart->uart_device,USART_FLAG_TC); return RT_EOK; } @@ -159,6 +157,7 @@ static int stm32_putc(struct rt_serial_device *serial, char c) } else { + USART_ClearFlag(uart->uart_device,USART_FLAG_TC); uart->uart_device->DR = c; while (!(uart->uart_device->SR & USART_FLAG_TC)); } diff --git a/bsp/stm32f40x/drivers/usart.c b/bsp/stm32f40x/drivers/usart.c index 0633c82cdd..bd8ea3239b 100644 --- a/bsp/stm32f40x/drivers/usart.c +++ b/bsp/stm32f40x/drivers/usart.c @@ -166,8 +166,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while (!(uart->uart_device->SR & USART_FLAG_TXE)); + USART_ClearFlag(uart->uart_device,USART_FLAG_TC); uart->uart_device->DR = c; + while (!(uart->uart_device->SR & USART_FLAG_TC)); return 1; } diff --git a/bsp/stm32f411-nucleo/drivers/drv_usart.c b/bsp/stm32f411-nucleo/drivers/drv_usart.c index a0a0088694..dacd1490eb 100644 --- a/bsp/stm32f411-nucleo/drivers/drv_usart.c +++ b/bsp/stm32f411-nucleo/drivers/drv_usart.c @@ -155,8 +155,9 @@ static int drv_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct drv_uart *)serial->parent.user_data; - while((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->DR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32f429-apollo/drivers/usart.c b/bsp/stm32f429-apollo/drivers/usart.c index ecca8b7307..5ed0100dc3 100644 --- a/bsp/stm32f429-apollo/drivers/usart.c +++ b/bsp/stm32f429-apollo/drivers/usart.c @@ -185,8 +185,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->DR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32f429-armfly/drivers/usart.c b/bsp/stm32f429-armfly/drivers/usart.c index ecca8b7307..5ed0100dc3 100644 --- a/bsp/stm32f429-armfly/drivers/usart.c +++ b/bsp/stm32f429-armfly/drivers/usart.c @@ -185,8 +185,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->DR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32f429-disco/drivers/usart.c b/bsp/stm32f429-disco/drivers/usart.c index f7ba2ed277..7509cbf64c 100644 --- a/bsp/stm32f429-disco/drivers/usart.c +++ b/bsp/stm32f429-disco/drivers/usart.c @@ -185,8 +185,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->DR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32f4xx-HAL/drivers/drv_usart.c b/bsp/stm32f4xx-HAL/drivers/drv_usart.c index db3321ab34..083cdfc39b 100644 --- a/bsp/stm32f4xx-HAL/drivers/drv_usart.c +++ b/bsp/stm32f4xx-HAL/drivers/drv_usart.c @@ -122,8 +122,9 @@ static int drv_putc(struct rt_serial_device *serial, char c) struct drv_uart *uart; RT_ASSERT(serial != RT_NULL); uart = (struct drv_uart *)serial->parent.user_data; - while ((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->DR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32f7-disco/drivers/drv_usart.c b/bsp/stm32f7-disco/drivers/drv_usart.c index 5d54d6903b..2c15fafc29 100644 --- a/bsp/stm32f7-disco/drivers/drv_usart.c +++ b/bsp/stm32f7-disco/drivers/drv_usart.c @@ -106,7 +106,7 @@ static int drv_putc(struct rt_serial_device *serial, char c) struct drv_uart *uart; RT_ASSERT(serial != RT_NULL); uart = (struct drv_uart *)serial->parent.user_data; - while ((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->TDR = c; return 1; } diff --git a/bsp/stm32h743-nucleo/drivers/drv_usart.c b/bsp/stm32h743-nucleo/drivers/drv_usart.c index e8620b65ee..26b624130e 100644 --- a/bsp/stm32h743-nucleo/drivers/drv_usart.c +++ b/bsp/stm32h743-nucleo/drivers/drv_usart.c @@ -138,8 +138,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while (!(uart->UartHandle.Instance->ISR & UART_FLAG_TXE)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->TDR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32l475-iot-disco/drivers/usart.c b/bsp/stm32l475-iot-disco/drivers/usart.c index fa5a68e7cb..15f52ecedb 100644 --- a/bsp/stm32l475-iot-disco/drivers/usart.c +++ b/bsp/stm32l475-iot-disco/drivers/usart.c @@ -185,8 +185,9 @@ static int stm32_putc(struct rt_serial_device *serial, char c) RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; - while((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->TDR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; } diff --git a/bsp/stm32l476-nucleo/drivers/drv_usart.c b/bsp/stm32l476-nucleo/drivers/drv_usart.c index c5f5e728a3..a4ec08db07 100644 --- a/bsp/stm32l476-nucleo/drivers/drv_usart.c +++ b/bsp/stm32l476-nucleo/drivers/drv_usart.c @@ -141,8 +141,9 @@ static int drv_putc(struct rt_serial_device *serial, char c) uart = (struct drv_uart *)serial->parent.user_data; - while ((__HAL_UART_GET_FLAG(&uart->UartHandle, UART_FLAG_TXE) == RESET)); + __HAL_UART_CLEAR_FLAG(&(uart->UartHandle), UART_FLAG_TC); uart->UartHandle.Instance->TDR = c; + while (__HAL_UART_GET_FLAG(&(uart->UartHandle), UART_FLAG_TC) == RESET); return 1; }