From 9b3b6c54210afb1c99c1b57cce700eccc49896a4 Mon Sep 17 00:00:00 2001 From: Dion Dokter Date: Tue, 3 Jun 2025 16:08:55 +0200 Subject: [PATCH] STM32 USB: Read data before register update --- embassy-stm32/src/usb/usb.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/embassy-stm32/src/usb/usb.rs b/embassy-stm32/src/usb/usb.rs index 0b878915a..3e8e74a1f 100644 --- a/embassy-stm32/src/usb/usb.rs +++ b/embassy-stm32/src/usb/usb.rs @@ -911,6 +911,8 @@ impl<'d, T: Instance> driver::EndpointOut for Endpoint<'d, T, Out> { }; self.read_data_double_buffered(buf, packet_buffer)? } else { + let len = self.read_data(buf)?; + regs.epr(index).write(|w| { w.set_ep_type(convert_type(self.info.ep_type)); w.set_ea(self.info.addr.index() as _); @@ -920,7 +922,7 @@ impl<'d, T: Instance> driver::EndpointOut for Endpoint<'d, T, Out> { w.set_ctr_tx(true); // don't clear }); - self.read_data(buf)? + len }; trace!("READ OK, rx_len = {}", rx_len);