diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-02-24 14:34:13 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-02-24 14:34:13 +0000 |
| commit | 00ef474b94d99a1fd933e79bd66628cd3a16e3c4 (patch) | |
| tree | 8bae77497d55065c1e57a4ef145040ff8d5e978e | |
| parent | 6b04942ab7fef45c560890268ae72b434eab0720 (diff) | |
| parent | 519bd8646769899040b33a42ab57ddbd869d31ae (diff) | |
Merge pull request #3915 from embedded-rust-iml/fix/BufferedUartRx-nb-read
fix: BufferedUartRx embedded_hal_nb::serial::Read impl
| -rw-r--r-- | embassy-stm32/src/usart/buffered.rs | 29 |
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 | } |
