Skip to content

Commit

Permalink
Merge pull request #3915 from embedded-rust-iml/fix/BufferedUartRx-nb…
Browse files Browse the repository at this point in the history
…-read

fix: BufferedUartRx embedded_hal_nb::serial::Read impl
  • Loading branch information
Dirbaio authored Feb 24, 2025
2 parents 6b04942 + 519bd86 commit 00ef474
Showing 1 changed file with 10 additions and 19 deletions.
29 changes: 10 additions & 19 deletions embassy-stm32/src/usart/buffered.rs
Original file line number Diff line number Diff line change
Expand Up @@ -908,26 +908,17 @@ impl<'d> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d> {
type Error = Error;

fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
let r = self.info.regs;
unsafe {
let sr = sr(r).read();
if sr.pe() {
rdr(r).read_volatile();
Err(nb::Error::Other(Error::Parity))
} else if sr.fe() {
rdr(r).read_volatile();
Err(nb::Error::Other(Error::Framing))
} else if sr.ne() {
rdr(r).read_volatile();
Err(nb::Error::Other(Error::Noise))
} else if sr.ore() {
rdr(r).read_volatile();
Err(nb::Error::Other(Error::Overrun))
} else if sr.rxne() {
Ok(rdr(r).read_volatile())
} else {
Err(nb::Error::WouldBlock)
let state = self.state;
let mut rx_reader = unsafe { state.rx_buf.reader() };

let do_pend = state.rx_buf.is_full();
if let Some(data) = rx_reader.pop_one() {
if do_pend {
self.info.interrupt.pend();
}
Ok(data)
} else {
Err(nb::Error::WouldBlock)
}
}
}
Expand Down

0 comments on commit 00ef474

Please sign in to comment.