if i flash a basic firmware that prints Hello World via usb cdc/acm using the stm toolchain it works. if i use any usb_* example from embassy-rs i get various error numbers in my dmesg: ``` [13113.592919] usb 1-2.4.1: USB disconnect, device number 101 [13115.305599] usb 1-2.4.1: new full-speed USB device number 102 using xhci_hcd [13115.446617] usb 1-2.4.1: device descriptor read/64, error -71 [13115.688619] usb 1-2.4.1: device descriptor read/64, error -71 [13115.859594] usb 1-2.4.1: new full-speed USB device number 103 using xhci_hcd [13116.001617] usb 1-2.4.1: device descriptor read/64, error -71 [13116.249607] usb 1-2.4.1: device descriptor read/64, error -71 [13116.356667] usb 1-2.4-port1: attempt power cycle [13116.942584] usb 1-2.4.1: new full-speed USB device number 104 using xhci_hcd [13127.308551] usb 1-2.4.1: device descriptor read/8, error -110 [13142.150274] usb 1-2.4.1: device descriptor read/8, error -32 [13145.773241] usb 1-2.4.1: new full-speed USB device number 106 using xhci_hcd [13867.766963] usb 1-2.2: USB disconnect, device number 64 ``` the errors apparently change based on the assigned device class, but they're not really consistent. i observed error -71, -110 and -32. assuming that the embassy-usb implementation is correct i guess the issue lies in my clocks. ``` let mut clocks = Config::default(); // set the internal clock to run at max (80MHz) clocks.rcc.hsi = true; clocks.rcc.hse = Some(embassy_stm32::rcc::Hse { freq: Hertz(8_000_000), mode: embassy_stm32::rcc::HseMode::Oscillator, }); clocks.rcc.pll = Some(embassy_stm32::rcc::Pll { source: embassy_stm32::rcc::PllSource::HSE, mul: embassy_stm32::rcc::PllMul::MUL20, divp: Some(embassy_stm32::rcc::PllPDiv::DIV7), divq: Some(embassy_stm32::rcc::PllQDiv::DIV2), divr: Some(embassy_stm32::rcc::PllRDiv::DIV2), prediv: embassy_stm32::rcc::PllPreDiv::DIV1, }); // USB clocks.rcc.pllsai1 = Some(embassy_stm32::rcc::Pll { source: embassy_stm32::rcc::PllSource::HSE, prediv: embassy_stm32::rcc::PllPreDiv::DIV1, mul: embassy_stm32::rcc::PllMul::MUL12, divp: Some(embassy_stm32::rcc::PllPDiv::DIV7), divq: Some(embassy_stm32::rcc::PllQDiv::DIV2), divr: Some(embassy_stm32::rcc::PllRDiv::DIV2), }); clocks.rcc.pllsai2 = Some(embassy_stm32::rcc::Pll { source: embassy_stm32::rcc::PllSource::HSE, prediv: embassy_stm32::rcc::PllPreDiv::DIV1, mul: embassy_stm32::rcc::PllMul::MUL8, divp: Some(embassy_stm32::rcc::PllPDiv::DIV7), divq: None, divr: Some(embassy_stm32::rcc::PllRDiv::DIV2), }); clocks.rcc.mux.clk48sel = embassy_stm32::rcc::mux::Clk48sel::PLLSAI1_Q; clocks.rcc.sys = embassy_stm32::rcc::Sysclk::HSE; clocks.rcc.ahb_pre = embassy_stm32::rcc::AHBPrescaler::DIV2; clocks.rcc.apb1_pre = embassy_stm32::rcc::APBPrescaler::DIV1; clocks.rcc.apb2_pre = embassy_stm32::rcc::APBPrescaler::DIV1; clocks.rcc.mux.adcsel = embassy_stm32::rcc::mux::Adcsel::SYS; ``` can anyone spot any obvious mistake?