aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/src/usart/mod.rs1
-rw-r--r--embassy-stm32/src/usart/ringbuffered.rs10
2 files changed, 10 insertions, 1 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index 5b7f8dc26..10e3ea88b 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -711,7 +711,6 @@ impl<'d> UartRx<'d, Async> {
711 711
712 // make sure USART state is restored to neutral state when this future is dropped 712 // make sure USART state is restored to neutral state when this future is dropped
713 let on_drop = OnDrop::new(move || { 713 let on_drop = OnDrop::new(move || {
714 // defmt::trace!("Clear all USART interrupts and DMA Read Request");
715 // clear all interrupts and DMA Rx Request 714 // clear all interrupts and DMA Rx Request
716 r.cr1().modify(|w| { 715 r.cr1().modify(|w| {
717 // disable RXNE interrupt 716 // disable RXNE interrupt
diff --git a/embassy-stm32/src/usart/ringbuffered.rs b/embassy-stm32/src/usart/ringbuffered.rs
index 8e42d5917..eaa9424c5 100644
--- a/embassy-stm32/src/usart/ringbuffered.rs
+++ b/embassy-stm32/src/usart/ringbuffered.rs
@@ -150,6 +150,16 @@ impl<'d> RingBufferedUartRx<'d> {
150 pub async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> { 150 pub async fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> {
151 self.start_dma_or_check_errors()?; 151 self.start_dma_or_check_errors()?;
152 152
153 // In half-duplex mode, we need to disable the Transmitter and enable the Receiver
154 // since they can't operate simultaneously on the shared line
155 let r = self.info.regs;
156 if r.cr3().read().hdsel() && r.cr1().read().te() {
157 r.cr1().modify(|reg| {
158 reg.set_re(true);
159 reg.set_te(false);
160 });
161 }
162
153 loop { 163 loop {
154 match self.ring_buf.read(buf) { 164 match self.ring_buf.read(buf) {
155 Ok((0, _)) => {} 165 Ok((0, _)) => {}