aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-07-03 14:24:43 +0000
committerGitHub <[email protected]>2025-07-03 14:24:43 +0000
commit4af2d9adc4494922058a48e4329c53eb305446bf (patch)
tree3413888477bc49509baf7085d36df9d78079510c
parent4727c07a0830db45fb4424e2c861c6c44efa4fb1 (diff)
parente256f1360b4dff74f712b35db6a5f1bdf794a131 (diff)
Merge pull request #4365 from qwerty19106/stm32_impl_nb_write
stm32: Fix impl embedded_hal_nb::serial::Write for usart::UartTx
-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> {