diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-07-16 18:13:11 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-16 18:13:11 +0000 |
| commit | 5c1d1d37660fb32f015b7bb5cd72162fc504132b (patch) | |
| tree | 7941eef3ac28a6a6a5fdbeb6fe4539715f58b76c | |
| parent | 1dd8c2a745ff20ec0522d6e1866521cd91b64570 (diff) | |
| parent | 62b9b03325ae94f650439070e9838885b7bcb345 (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.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 2 |
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 |
| 652 | fn half_duplex_set_rx_tx_before_write(r: &Regs, enable_readback: bool) { | 652 | fn 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); |
