diff options
author | Paul Selkirk <paul@psgd.org> | 2017-04-17 16:12:25 -0400 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2017-04-17 16:12:25 -0400 |
commit | 410e6bb67fb5df5d0e4c962deac3e5562e5dc48f (patch) | |
tree | 94e2ab6f4ff4266be11ab5dcb3e8d24b83ce2ce8 /stm-uart.c | |
parent | dc0ec1a3e0afe5d3d46c9eafd15a87e7de016acb (diff) |
Rewrite the wait-for-ready loop in uart_send_bytes() to actually work.
Diffstat (limited to 'stm-uart.c')
-rw-r--r-- | stm-uart.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -105,14 +105,15 @@ HAL_StatusTypeDef uart_send_string2(stm_uart_port_t port, const char *s) /* send raw bytes */ HAL_StatusTypeDef uart_send_bytes(stm_uart_port_t port, uint8_t *buf, size_t len) { - uint32_t timeout = 100; UART_HandleTypeDef *uart = _which_uart(port); if (uart) { - while (HAL_UART_GetState(uart) != HAL_UART_STATE_READY && timeout--) { ; } - if (! timeout) return HAL_ERROR; - - return HAL_UART_Transmit(uart, (uint8_t *) buf, (uint32_t) len, 0x1); + for (int timeout = 0; timeout < 100; ++timeout) { + HAL_UART_StateTypeDef status = HAL_UART_GetState(uart); + if (status == HAL_UART_STATE_READY || + status == HAL_UART_STATE_BUSY_RX) + return HAL_UART_Transmit(uart, (uint8_t *) buf, (uint32_t) len, 0x1); + } } return HAL_ERROR; |