diff options
| author | Gerzain Mata <[email protected]> | 2025-07-25 14:26:06 -0700 |
|---|---|---|
| committer | Gerzain Mata <[email protected]> | 2025-07-25 14:26:12 -0700 |
| commit | 75c1039aa11fa9a134511ce0988aefa088a0e6b0 (patch) | |
| tree | 49d07032c181f2b8057baaef76aea8b706564735 /examples | |
| parent | ba5156b6cbe70294cf92977ea35991ddd723c7a9 (diff) | |
Moved from HSE to HSI to generate USB_OTG_HS_CLK
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/stm32wba/src/bin/usb_hs_serial.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/examples/stm32wba/src/bin/usb_hs_serial.rs b/examples/stm32wba/src/bin/usb_hs_serial.rs index bda4a5013..393f8be6b 100644 --- a/examples/stm32wba/src/bin/usb_hs_serial.rs +++ b/examples/stm32wba/src/bin/usb_hs_serial.rs | |||
| @@ -6,7 +6,7 @@ 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, PllPreDiv, PllMul, PllDiv}; | 8 | use embassy_stm32::rcc::{PllSource, PllPreDiv, PllMul, PllDiv}; |
| 9 | use embassy_stm32::rcc::{mux, AHBPrescaler, APBPrescaler, Hse, HsePrescaler, Sysclk, VoltageScale}; | 9 | use embassy_stm32::rcc::{mux, AHBPrescaler, AHB5Prescaler, APBPrescaler, Hse, HsePrescaler, Sysclk, VoltageScale}; |
| 10 | use embassy_stm32::usb::{Driver, Instance}; | 10 | use embassy_stm32::usb::{Driver, Instance}; |
| 11 | use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; | 11 | use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; |
| 12 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; | 12 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; |
| @@ -25,26 +25,28 @@ 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 { | 28 | // config.rcc.hse = Some(Hse { |
| 29 | prescaler: HsePrescaler::DIV2, | 29 | // prescaler: HsePrescaler::DIV2, |
| 30 | }); | 30 | // }); |
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | // Fine-tune PLL1 dividers/multipliers | 33 | // Fine-tune PLL1 dividers/multipliers |
| 34 | config.rcc.pll1 = Some(embassy_stm32::rcc::Pll { | 34 | config.rcc.pll1 = Some(embassy_stm32::rcc::Pll { |
| 35 | source: PllSource::HSE, | 35 | source: PllSource::HSI, |
| 36 | prediv: PllPreDiv::DIV2, // PLLM = 2 → HSE / 2 = 8 MHz | 36 | prediv: PllPreDiv::DIV1, // PLLM = 1 → HSI / 1 = 16 MHz |
| 37 | mul: PllMul::MUL60, // PLLN = 60 → 8 MHz * 60 = 480 MHz VCO | 37 | mul: PllMul::MUL30, // PLLN = 30 → 16 MHz * 30 = 480 MHz VCO |
| 38 | divr: Some(PllDiv::DIV5), // PLLR = 5 → 96 MHz (Sysclk) | 38 | divr: Some(PllDiv::DIV5), // PLLR = 5 → 96 MHz (Sysclk) |
| 39 | divq: Some(PllDiv::DIV10), // PLLQ = 10 → 48 MHz (USB) | 39 | // divq: Some(PllDiv::DIV10), // PLLQ = 10 → 48 MHz (NOT USED) |
| 40 | divp: Some(PllDiv::DIV15), // PLLP = 15 → 32 MHz (USBOTG) | 40 | divq: None, |
| 41 | frac: Some(4096), // Fractional part (enabled) | 41 | divp: Some(PllDiv::DIV30), // PLLP = 30 → 16 MHz (USBOTG) |
| 42 | frac: Some(0), // Fractional part (enabled) | ||
| 42 | }); | 43 | }); |
| 43 | 44 | ||
| 44 | config.rcc.ahb_pre = AHBPrescaler::DIV1; | 45 | config.rcc.ahb_pre = AHBPrescaler::DIV1; |
| 45 | config.rcc.apb1_pre = APBPrescaler::DIV1; | 46 | config.rcc.apb1_pre = APBPrescaler::DIV1; |
| 46 | config.rcc.apb2_pre = APBPrescaler::DIV1; | 47 | config.rcc.apb2_pre = APBPrescaler::DIV1; |
| 47 | config.rcc.apb7_pre = APBPrescaler::DIV1; | 48 | config.rcc.apb7_pre = APBPrescaler::DIV1; |
| 49 | config.rcc.ahb5_pre = AHB5Prescaler::DIV4; | ||
| 48 | 50 | ||
| 49 | // voltage scale for max performance | 51 | // voltage scale for max performance |
| 50 | config.rcc.voltage_scale = VoltageScale::RANGE1; | 52 | config.rcc.voltage_scale = VoltageScale::RANGE1; |
