aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-07-16 18:13:11 +0000
committerGitHub <[email protected]>2025-07-16 18:13:11 +0000
commit5c1d1d37660fb32f015b7bb5cd72162fc504132b (patch)
tree7941eef3ac28a6a6a5fdbeb6fe4539715f58b76c
parent1dd8c2a745ff20ec0522d6e1866521cd91b64570 (diff)
parent62b9b03325ae94f650439070e9838885b7bcb345 (diff)
Merge pull request #4406 from chemicstry/stm32_bufuart_hd
Fix stm32 buffered half-duplex uart receive
-rw-r--r--embassy-stm32/src/usart/buffered.rs2
-rw-r--r--embassy-stm32/src/usart/mod.rs2
2 files changed, 3 insertions, 1 deletions
diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs
index 73ab46404..729440c46 100644
--- a/embassy-stm32/src/usart/buffered.rs
+++ b/embassy-stm32/src/usart/buffered.rs
@@ -87,6 +87,8 @@ unsafe fn on_interrupt(r: Regs, state: &'static State) {
87 87
88 r.cr1().modify(|w| { 88 r.cr1().modify(|w| {
89 w.set_tcie(false); 89 w.set_tcie(false);
90 // Reenable receiver for half-duplex if it was disabled
91 w.set_re(true);
90 }); 92 });
91 93
92 state.tx_done.store(true, Ordering::Release); 94 state.tx_done.store(true, Ordering::Release);
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index 8c9028f08..5bece6d66 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -651,7 +651,7 @@ pub fn send_break(regs: &Regs) {
651/// In case of readback, keep Receiver enabled 651/// In case of readback, keep Receiver enabled
652fn half_duplex_set_rx_tx_before_write(r: &Regs, enable_readback: bool) { 652fn half_duplex_set_rx_tx_before_write(r: &Regs, enable_readback: bool) {
653 let mut cr1 = r.cr1().read(); 653 let mut cr1 = r.cr1().read();
654 if r.cr3().read().hdsel() && !cr1.te() { 654 if r.cr3().read().hdsel() {
655 cr1.set_te(true); 655 cr1.set_te(true);
656 cr1.set_re(enable_readback); 656 cr1.set_re(enable_readback);
657 r.cr1().write_value(cr1); 657 r.cr1().write_value(cr1);