diff options
| author | qwerty19106 <[email protected]> | 2025-07-03 18:02:50 +0400 |
|---|---|---|
| committer | qwerty19106 <[email protected]> | 2025-07-03 18:17:01 +0400 |
| commit | e256f1360b4dff74f712b35db6a5f1bdf794a131 (patch) | |
| tree | 709e75b7f7e9b6990d243457a09a678a51728eae /embassy-stm32/src/usart | |
| parent | ec812d3e66e699db671f262239dc7c277c6cef2d (diff) | |
Fix impl embedded_hal_nb::serial::Write for embassy_stm32::usart::UartTx
Diffstat (limited to 'embassy-stm32/src/usart')
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs index b3f8bc00c..8c9028f08 100644 --- a/embassy-stm32/src/usart/mod.rs +++ b/embassy-stm32/src/usart/mod.rs | |||
| @@ -550,6 +550,20 @@ impl<'d, M: Mode> UartTx<'d, M> { | |||
| 550 | reconfigure(self.info, self.kernel_clock, config) | 550 | reconfigure(self.info, self.kernel_clock, config) |
| 551 | } | 551 | } |
| 552 | 552 | ||
| 553 | /// Write a single u8 if there is tx empty, otherwise return WouldBlock | ||
| 554 | pub(crate) fn nb_write(&mut self, byte: u8) -> Result<(), nb::Error<Error>> { | ||
| 555 | let r = self.info.regs; | ||
| 556 | let sr = sr(r).read(); | ||
| 557 | if sr.txe() { | ||
| 558 | unsafe { | ||
| 559 | tdr(r).write_volatile(byte); | ||
| 560 | } | ||
| 561 | Ok(()) | ||
| 562 | } else { | ||
| 563 | Err(nb::Error::WouldBlock) | ||
| 564 | } | ||
| 565 | } | ||
| 566 | |||
| 553 | /// Perform a blocking UART write | 567 | /// Perform a blocking UART write |
| 554 | pub fn blocking_write(&mut self, buffer: &[u8]) -> Result<(), Error> { | 568 | pub fn blocking_write(&mut self, buffer: &[u8]) -> Result<(), Error> { |
| 555 | let r = self.info.regs; | 569 | let r = self.info.regs; |
| @@ -1864,7 +1878,7 @@ impl<'d, M: Mode> embedded_hal_nb::serial::Read for UartRx<'d, M> { | |||
| 1864 | 1878 | ||
| 1865 | impl<'d, M: Mode> embedded_hal_nb::serial::Write for UartTx<'d, M> { | 1879 | impl<'d, M: Mode> embedded_hal_nb::serial::Write for UartTx<'d, M> { |
| 1866 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { | 1880 | fn write(&mut self, char: u8) -> nb::Result<(), Self::Error> { |
| 1867 | self.blocking_write(&[char]).map_err(nb::Error::Other) | 1881 | self.nb_write(char) |
| 1868 | } | 1882 | } |
| 1869 | 1883 | ||
| 1870 | fn flush(&mut self) -> nb::Result<(), Self::Error> { | 1884 | fn flush(&mut self) -> nb::Result<(), Self::Error> { |
