Skip to content

Is it suitable for delay in usart transmit ? #4

@Logiase

Description

@Logiase

atc/atc.c

Line 74 in 3d673c5

atc_delay(1);

If the serial open with 115200 8N1, it will transmit a bit in

1/115200 = 0.000086805555555555555555555555555556 s

one frame take

11 * 1 / 115200 = 0.00095486111111111111111111 s

1 second is just enough.

But if we open the serial with higher baudrate, an one second delay may trigger a IDLE interrupt (if the receiver is a STM32).

And if we use RTOS, maybe some other high priority task will take the control and delay the transmit task.

Or maybe i am wrong (Im a still a noob in embedded development)

void atc_transmit(atc_t *atc, uint8_t *data, uint16_t len)
{
  for (uint16_t i = 0; i < len; i++)
  {
    while (!LL_USART_IsActiveFlag_TXE(atc->usart))
      ;
    LL_USART_TransmitData8(atc->usart, data[i]);
  }
  while (!LL_USART_IsActiveFlag_TC(atc->usart))
    ;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions