aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorGerzain Mata <[email protected]>2025-07-25 14:26:06 -0700
committerGerzain Mata <[email protected]>2025-07-25 14:26:12 -0700
commit75c1039aa11fa9a134511ce0988aefa088a0e6b0 (patch)
tree49d07032c181f2b8057baaef76aea8b706564735 /examples
parentba5156b6cbe70294cf92977ea35991ddd723c7a9 (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.rs24
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
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_futures::join::join; 7use embassy_futures::join::join;
8use embassy_stm32::rcc::{PllSource, PllPreDiv, PllMul, PllDiv}; 8use embassy_stm32::rcc::{PllSource, PllPreDiv, PllMul, PllDiv};
9use embassy_stm32::rcc::{mux, AHBPrescaler, APBPrescaler, Hse, HsePrescaler, Sysclk, VoltageScale}; 9use embassy_stm32::rcc::{mux, AHBPrescaler, AHB5Prescaler, APBPrescaler, Hse, HsePrescaler, Sysclk, VoltageScale};
10use embassy_stm32::usb::{Driver, Instance}; 10use embassy_stm32::usb::{Driver, Instance};
11use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; 11use embassy_stm32::{bind_interrupts, peripherals, usb, Config};
12use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; 12use 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;