Skip to content

Commit a1cddba

Browse files
authored
Merge pull request #11938 from LMESTM/stm32_serial_clear_rxne
STM32: Update and align serial_clear implementations
2 parents 57f9a1e + f20529f commit a1cddba

File tree

11 files changed

+35
-23
lines changed

11 files changed

+35
-23
lines changed

targets/TARGET_STM/TARGET_STM32F0/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,9 @@ void serial_clear(serial_t *obj)
281281
struct serial_s *obj_s = SERIAL_S(obj);
282282
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
283283

284-
huart->TxXferCount = 0;
285-
huart->RxXferCount = 0;
284+
/* Clear RXNE and error flags */
285+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
286+
HAL_UART_ErrorCallback(huart);
286287
}
287288

288289
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32F1/serial_device.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,9 @@ void serial_clear(serial_t *obj)
196196
struct serial_s *obj_s = SERIAL_S(obj);
197197
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
198198

199-
huart->TxXferCount = 0;
200-
huart->RxXferCount = 0;
199+
/* Clear RXNE and error flags */
200+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR;
201+
HAL_UART_ErrorCallback(huart);
201202
}
202203

203204
void serial_break_set(serial_t *obj)
@@ -576,7 +577,7 @@ void serial_rx_abort_asynch(serial_t *obj)
576577

577578
// clear flags
578579
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
579-
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR; // Clear errors flag
580+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR; // Clear Rx empty flag
580581

581582
// reset states
582583
huart->RxXferCount = 0;

targets/TARGET_STM/TARGET_STM32F2/serial_device.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,9 @@ void serial_clear(serial_t *obj)
253253
struct serial_s *obj_s = SERIAL_S(obj);
254254
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
255255

256-
huart->TxXferCount = 0;
257-
huart->RxXferCount = 0;
256+
/* Clear RXNE and error flags */
257+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR;
258+
HAL_UART_ErrorCallback(huart);
258259
}
259260

260261
void serial_break_set(serial_t *obj)
@@ -659,7 +660,7 @@ void serial_rx_abort_asynch(serial_t *obj)
659660

660661
// clear flags
661662
__HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE);
662-
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR; // Clear error flags
663+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR; // Clear Rx empty flags
663664

664665
// reset states
665666
huart->RxXferCount = 0;

targets/TARGET_STM/TARGET_STM32F3/serial_device.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,9 @@ void serial_clear(serial_t *obj)
228228
struct serial_s *obj_s = SERIAL_S(obj);
229229
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
230230

231-
__HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
231+
/* Clear RXNE and error flags */
232+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
233+
HAL_UART_ErrorCallback(huart);
232234
}
233235

234236
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32F4/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,9 @@ void serial_clear(serial_t *obj)
289289
struct serial_s *obj_s = SERIAL_S(obj);
290290
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
291291

292-
huart->TxXferCount = 0;
293-
huart->RxXferCount = 0;
292+
/* Clear RXNE and error flags */
293+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR;
294+
HAL_UART_ErrorCallback(huart);
294295
}
295296

296297
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32F7/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,9 @@ void serial_clear(serial_t *obj)
252252
struct serial_s *obj_s = SERIAL_S(obj);
253253
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
254254

255-
__HAL_UART_CLEAR_IT(huart, UART_FLAG_TXE);
256-
__HAL_UART_CLEAR_IT(huart, UART_FLAG_RXNE);
255+
/* Clear RXNE and error flags */
256+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
257+
HAL_UART_ErrorCallback(huart);
257258
}
258259

259260
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32H7/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,9 @@ void serial_clear(serial_t *obj)
265265
struct serial_s *obj_s = SERIAL_S(obj);
266266
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
267267

268-
__HAL_UART_CLEAR_IT(huart, UART_FLAG_TXE);
269-
__HAL_UART_CLEAR_IT(huart, UART_FLAG_RXNE);
268+
/* Clear RXNE and error flags */
269+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
270+
HAL_UART_ErrorCallback(huart);
270271
}
271272

272273
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32L0/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,9 @@ void serial_clear(serial_t *obj)
222222
struct serial_s *obj_s = SERIAL_S(obj);
223223
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
224224

225-
huart->TxXferCount = 0;
226-
huart->RxXferCount = 0;
225+
/* Clear RXNE and error flags */
226+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
227+
HAL_UART_ErrorCallback(huart);
227228
}
228229

229230
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32L1/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,9 @@ void serial_clear(serial_t *obj)
222222
struct serial_s *obj_s = SERIAL_S(obj);
223223
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
224224

225-
huart->TxXferCount = 0;
226-
huart->RxXferCount = 0;
225+
/* Clear RXNE and error flags */
226+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->DR;
227+
HAL_UART_ErrorCallback(huart);
227228
}
228229

229230
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32L4/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,9 @@ void serial_clear(serial_t *obj)
241241
struct serial_s *obj_s = SERIAL_S(obj);
242242
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
243243

244-
huart->TxXferCount = 0;
245-
huart->RxXferCount = 0;
244+
/* Clear RXNE and error flags */
245+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
246+
HAL_UART_ErrorCallback(huart);
246247
}
247248

248249
void serial_break_set(serial_t *obj)

targets/TARGET_STM/TARGET_STM32WB/serial_device.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,9 @@ void serial_clear(serial_t *obj)
186186
struct serial_s *obj_s = SERIAL_S(obj);
187187
UART_HandleTypeDef *huart = &uart_handlers[obj_s->index];
188188

189-
huart->TxXferCount = 0;
190-
huart->RxXferCount = 0;
189+
/* Clear RXNE and error flags */
190+
volatile uint32_t tmpval __attribute__((unused)) = huart->Instance->RDR;
191+
HAL_UART_ErrorCallback(huart);
191192
}
192193

193194
void serial_break_set(serial_t *obj)

0 commit comments

Comments
 (0)