diff options
| author | BalanceTWK <[email protected]> | 2018-12-06 15:04:36 +0800 |
|---|---|---|
| committer | BalanceTWK <[email protected]> | 2018-12-06 15:04:36 +0800 |
| commit | f375486e491d36a81d371efc6629c311220596d6 (patch) | |
| tree | 74aebde0d333eaf172a92d39d04d7f588a703749 | |
| parent | 73d39e89ec89ba84559d0cef422abc54ea6c63d1 (diff) | |
[stm32 drv usart] 修复串口发送第一个字节丢失的问题。| Fixed a problem where the first byte of a serial port was lost.
| -rw-r--r-- | bsp/stm32f0x/drivers/usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f107/drivers/usart.c | 1 | ||||
| -rw-r--r-- | bsp/stm32f10x-HAL/drivers/drv_usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f40x/drivers/usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f411-nucleo/drivers/drv_usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f429-apollo/drivers/usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f429-armfly/drivers/usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f429-disco/drivers/usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f4xx-HAL/drivers/drv_usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32f7-disco/drivers/drv_usart.c | 2 | ||||
| -rw-r--r-- | bsp/stm32h743-nucleo/drivers/drv_usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32l475-iot-disco/drivers/usart.c | 3 | ||||
| -rw-r--r-- | bsp/stm32l476-nucleo/drivers/drv_usart.c | 3 |
13 files changed, 24 insertions, 12 deletions
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/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; } |
