Embedded-hal: Serial: Sending break condition

Created on 6 Mar 2020  路  3Comments  路  Source: rust-embedded/embedded-hal

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)

discussion

All 3 comments

IMO taking self by value to work around limited HALs is not a good idea. HALs should consider implementing something like this API instead: https://github.com/stm32-rs/stm32l0xx-hal/pull/74

@jonas-schievink good call, I updated the proposal.

Okay, that wouldn't work with a nonblocking API I suppose

Was this page helpful?
0 / 5 - 0 ratings

Related issues

japaric picture japaric  路  8Comments

thejpster picture thejpster  路  6Comments

hargoniX picture hargoniX  路  10Comments

TheZoq2 picture TheZoq2  路  10Comments

eisterman picture eisterman  路  13Comments