summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBalanceTWK <[email protected]>2018-12-06 15:04:36 +0800
committerBalanceTWK <[email protected]>2018-12-06 15:04:36 +0800
commitf375486e491d36a81d371efc6629c311220596d6 (patch)
tree74aebde0d333eaf172a92d39d04d7f588a703749
parent73d39e89ec89ba84559d0cef422abc54ea6c63d1 (diff)
[stm32 drv usart] 修复串口发送第一个字节丢失的问题。| Fixed a problem where the first byte of a serial port was lost.
-rw-r--r--bsp/stm32f0x/drivers/usart.c3
-rw-r--r--bsp/stm32f107/drivers/usart.c1
-rw-r--r--bsp/stm32f10x-HAL/drivers/drv_usart.c3
-rw-r--r--bsp/stm32f40x/drivers/usart.c3
-rw-r--r--bsp/stm32f411-nucleo/drivers/drv_usart.c3
-rw-r--r--bsp/stm32f429-apollo/drivers/usart.c3
-rw-r--r--bsp/stm32f429-armfly/drivers/usart.c3
-rw-r--r--bsp/stm32f429-disco/drivers/usart.c3
-rw-r--r--bsp/stm32f4xx-HAL/drivers/drv_usart.c3
-rw-r--r--bsp/stm32f7-disco/drivers/drv_usart.c2
-rw-r--r--bsp/stm32h743-nucleo/drivers/drv_usart.c3
-rw-r--r--bsp/stm32l475-iot-disco/drivers/usart.c3
-rw-r--r--bsp/stm32l476-nucleo/drivers/drv_usart.c3
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;
}