diff options
| -rw-r--r-- | examples/stm32wba/src/bin/usb_hs_serial.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/examples/stm32wba/src/bin/usb_hs_serial.rs b/examples/stm32wba/src/bin/usb_hs_serial.rs index be2d0a4e5..d77a679fe 100644 --- a/examples/stm32wba/src/bin/usb_hs_serial.rs +++ b/examples/stm32wba/src/bin/usb_hs_serial.rs | |||
| @@ -5,12 +5,12 @@ use defmt::{panic, *}; | |||
| 5 | use defmt_rtt as _; // global logger | 5 | use defmt_rtt as _; // global logger |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_futures::join::join; | 7 | use embassy_futures::join::join; |
| 8 | use embassy_stm32::rcc::PllSource; | ||
| 9 | use embassy_stm32::rcc::{mux, AHBPrescaler, APBPrescaler, Hse, HsePrescaler, Sysclk, VoltageScale}; | ||
| 8 | use embassy_stm32::usb::{Driver, Instance}; | 10 | use embassy_stm32::usb::{Driver, Instance}; |
| 9 | use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; | 11 | use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; |
| 10 | use embassy_stm32::rcc::{VoltageScale, Hse, HsePrescaler, APBPrescaler, AHBPrescaler, Sysclk, mux}; | ||
| 11 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; | 12 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; |
| 12 | use embassy_usb::driver::EndpointError; | 13 | use embassy_usb::driver::EndpointError; |
| 13 | use embassy_stm32::rcc::PllSource; | ||
| 14 | use embassy_usb::Builder; | 14 | use embassy_usb::Builder; |
| 15 | use panic_probe as _; | 15 | use panic_probe as _; |
| 16 | 16 | ||
| @@ -25,7 +25,9 @@ async fn main(_spawner: Spawner) { | |||
| 25 | let mut config = Config::default(); | 25 | let mut config = Config::default(); |
| 26 | 26 | ||
| 27 | // External HSE (32 MHz) setup | 27 | // External HSE (32 MHz) setup |
| 28 | config.rcc.hse = Some(Hse { prescaler: HsePrescaler::DIV1 }); | 28 | config.rcc.hse = Some(Hse { |
| 29 | prescaler: HsePrescaler::DIV1, | ||
| 30 | }); | ||
| 29 | 31 | ||
| 30 | // route HSE into the USB‐OTG‐HS block | 32 | // route HSE into the USB‐OTG‐HS block |
| 31 | config.rcc.mux.otghssel = mux::Otghssel::HSE; | 33 | config.rcc.mux.otghssel = mux::Otghssel::HSE; |
| @@ -33,16 +35,15 @@ async fn main(_spawner: Spawner) { | |||
| 33 | 35 | ||
| 34 | // Fine-tune PLL1 dividers/multipliers | 36 | // Fine-tune PLL1 dividers/multipliers |
| 35 | config.rcc.pll1 = Some(embassy_stm32::rcc::Pll { | 37 | config.rcc.pll1 = Some(embassy_stm32::rcc::Pll { |
| 36 | source: PllSource::HSE, | 38 | source: PllSource::HSE, |
| 37 | pllm: 2, // PLLM = 2 → HSE / 2 = 16 MHz input | 39 | pllm: 2, // PLLM = 2 → HSE / 2 = 16 MHz input |
| 38 | mul: 12, // PLLN = 12 → 16 MHz * 12 = 192 MHz VCO | 40 | mul: 12, // PLLN = 12 → 16 MHz * 12 = 192 MHz VCO |
| 39 | divp: Some(2), // PLLP = 2 → 96 MHz | 41 | divp: Some(2), // PLLP = 2 → 96 MHz |
| 40 | divq: Some(2), // PLLQ = 2 → 96 MHz | 42 | divq: Some(2), // PLLQ = 2 → 96 MHz |
| 41 | divr: Some(2), // PLLR = 2 → 96 MHz | 43 | divr: Some(2), // PLLR = 2 → 96 MHz |
| 42 | frac: Some(4096), // Fractional part (enabled) | 44 | frac: Some(4096), // Fractional part (enabled) |
| 43 | }); | 45 | }); |
| 44 | 46 | ||
| 45 | |||
| 46 | config.rcc.ahb_pre = AHBPrescaler::DIV1; | 47 | config.rcc.ahb_pre = AHBPrescaler::DIV1; |
| 47 | config.rcc.apb1_pre = APBPrescaler::DIV1; | 48 | config.rcc.apb1_pre = APBPrescaler::DIV1; |
| 48 | config.rcc.apb2_pre = APBPrescaler::DIV1; | 49 | config.rcc.apb2_pre = APBPrescaler::DIV1; |
