aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/usart/buffered.rs29
1 files changed, 10 insertions, 19 deletions
diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs
index b0e0aed80..7fa9ee08e 100644
--- a/embassy-stm32/src/usart/buffered.rs
+++ b/embassy-stm32/src/usart/buffered.rs
@@ -908,26 +908,17 @@ impl<'d> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d> {
908 type Error = Error; 908 type Error = Error;
909 909
910 fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> { 910 fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
911 let r = self.info.regs; 911 let state = self.state;
912 unsafe { 912 let mut rx_reader = unsafe { state.rx_buf.reader() };
913 let sr = sr(r).read(); 913
914 if sr.pe() { 914 let do_pend = state.rx_buf.is_full();
915 rdr(r).read_volatile(); 915 if let Some(data) = rx_reader.pop_one() {
916 Err(nb::Error::Other(Error::Parity)) 916 if do_pend {
917 } else if sr.fe() { 917 self.info.interrupt.pend();
918 rdr(r).read_volatile();
919 Err(nb::Error::Other(Error::Framing))
920 } else if sr.ne() {
921 rdr(r).read_volatile();
922 Err(nb::Error::Other(Error::Noise))
923 } else if sr.ore() {
924 rdr(r).read_volatile();
925 Err(nb::Error::Other(Error::Overrun))
926 } else if sr.rxne() {
927 Ok(rdr(r).read_volatile())
928 } else {
929 Err(nb::Error::WouldBlock)
930 } 918 }
919 Ok(data)
920 } else {
921 Err(nb::Error::WouldBlock)
931 } 922 }
932 } 923 }
933} 924}