Description
It seems like an embedded-hal driver cannot issue a USART break condition using only the embedded-hal serial trait, right?
A break condition is signaled to the module by keeping the UART_RX pin
low for longer than the time to transmit a complete character. For example,
at the default baud rate of 57600 bps keeping the UART_RX pin low for 938
us is a valid break condition, whereas at 9600 bps this would be interpreted
as a 0x00 character. Thus, the break condition needs to be long enough
to still be interpreted as such at the baud rate that is currently in use.
Also, in Wikipedia: https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter#Break_condition
It seems that a HAL would have to reconfigure the pin as GPIO output pin, pull it low for a certain duration (depending on baudrate), then reconfigure it as serial pin again.
Would it make sense to add a BreakCondition
trait to the serial
module?
trait BreakCondition {
type Error;
fn send_break_condition(&mut self) -> nb::Result<(), Self::Error>;
}
(Edit: Updated to take &mut self
instead of self
)