aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDion Dokter <[email protected]>2025-06-03 16:08:55 +0200
committerDion Dokter <[email protected]>2025-06-03 16:08:55 +0200
commit9b3b6c54210afb1c99c1b57cce700eccc49896a4 (patch)
tree44f30d62efc1256c0365fc864f0680f0497a1a35
parentc637ee7d79552d9b9bfa0c0f4199372975acc343 (diff)
STM32 USB: Read data before register update
-rw-r--r--embassy-stm32/src/usb/usb.rs4
1 files changed, 3 insertions, 1 deletions
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> {
911 }; 911 };
912 self.read_data_double_buffered(buf, packet_buffer)? 912 self.read_data_double_buffered(buf, packet_buffer)?
913 } else { 913 } else {
914 let len = self.read_data(buf)?;
915
914 regs.epr(index).write(|w| { 916 regs.epr(index).write(|w| {
915 w.set_ep_type(convert_type(self.info.ep_type)); 917 w.set_ep_type(convert_type(self.info.ep_type));
916 w.set_ea(self.info.addr.index() as _); 918 w.set_ea(self.info.addr.index() as _);
@@ -920,7 +922,7 @@ impl<'d, T: Instance> driver::EndpointOut for Endpoint<'d, T, Out> {
920 w.set_ctr_tx(true); // don't clear 922 w.set_ctr_tx(true); // don't clear
921 }); 923 });
922 924
923 self.read_data(buf)? 925 len
924 }; 926 };
925 trace!("READ OK, rx_len = {}", rx_len); 927 trace!("READ OK, rx_len = {}", rx_len);
926 928