aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/usart/mod.rs16
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
1865impl<'d, M: Mode> embedded_hal_nb::serial::Write for UartTx<'d, M> { 1879impl<'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> {