diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-02-26 03:28:27 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2024-03-01 23:54:37 +0100 |
| commit | 95234cddbac6f21fce0f5df510d49816f343b87d (patch) | |
| tree | a9daf8a1bb9449191a7174269bc348f3ce61bfef /examples/stm32g0 | |
| parent | d5c9c611fa317e066d6cf7c5af0513b40bd69d8c (diff) | |
stm32: autogenerate mux config for all chips.
Diffstat (limited to 'examples/stm32g0')
| -rw-r--r-- | examples/stm32g0/src/bin/hf_timer.rs | 44 | ||||
| -rw-r--r-- | examples/stm32g0/src/bin/usb_serial.rs | 10 |
2 files changed, 26 insertions, 28 deletions
diff --git a/examples/stm32g0/src/bin/hf_timer.rs b/examples/stm32g0/src/bin/hf_timer.rs index 3f63d0dfd..647ff0419 100644 --- a/examples/stm32g0/src/bin/hf_timer.rs +++ b/examples/stm32g0/src/bin/hf_timer.rs | |||
| @@ -4,37 +4,35 @@ | |||
| 4 | use defmt::info; | 4 | use defmt::info; |
| 5 | use embassy_executor::Spawner; | 5 | use embassy_executor::Spawner; |
| 6 | use embassy_stm32::gpio::OutputType; | 6 | use embassy_stm32::gpio::OutputType; |
| 7 | use embassy_stm32::pac::rcc::vals::Tim1sel; | ||
| 8 | use embassy_stm32::rcc::{Config as RccConfig, PllConfig, PllSource, Pllm, Plln, Pllq, Pllr, Sysclk}; | ||
| 9 | use embassy_stm32::time::khz; | 7 | use embassy_stm32::time::khz; |
| 10 | use embassy_stm32::timer::complementary_pwm::{ComplementaryPwm, ComplementaryPwmPin}; | 8 | use embassy_stm32::timer::complementary_pwm::{ComplementaryPwm, ComplementaryPwmPin}; |
| 11 | use embassy_stm32::timer::simple_pwm::PwmPin; | 9 | use embassy_stm32::timer::simple_pwm::PwmPin; |
| 12 | use embassy_stm32::timer::Channel; | 10 | use embassy_stm32::timer::Channel; |
| 13 | use embassy_stm32::{pac, Config as PeripheralConfig}; | 11 | use embassy_stm32::Config as PeripheralConfig; |
| 14 | use {defmt_rtt as _, panic_probe as _}; | 12 | use {defmt_rtt as _, panic_probe as _}; |
| 15 | 13 | ||
| 16 | #[embassy_executor::main] | 14 | #[embassy_executor::main] |
| 17 | async fn main(_spawner: Spawner) { | 15 | async fn main(_spawner: Spawner) { |
| 18 | let mut rcc_config = RccConfig::default(); | 16 | let mut config = PeripheralConfig::default(); |
| 19 | rcc_config.sys = Sysclk::PLL(PllConfig { | 17 | { |
| 20 | source: PllSource::HSI, | 18 | use embassy_stm32::rcc::*; |
| 21 | m: Pllm::DIV1, | 19 | |
| 22 | n: Plln::MUL16, | 20 | config.rcc.sys = Sysclk::PLL(PllConfig { |
| 23 | r: Pllr::DIV4, // CPU clock comes from PLLR (HSI (16MHz) / 1 * 16 / 4 = 64MHz) | 21 | source: PllSource::HSI, |
| 24 | q: Some(Pllq::DIV2), // TIM1 or TIM15 can be sourced from PLLQ (HSI (16MHz) / 1 * 16 / 2 = 128MHz) | 22 | m: Pllm::DIV1, |
| 25 | p: None, | 23 | n: Plln::MUL16, |
| 26 | }); | 24 | r: Pllr::DIV4, // CPU clock comes from PLLR (HSI (16MHz) / 1 * 16 / 4 = 64MHz) |
| 27 | 25 | q: Some(Pllq::DIV2), // TIM1 or TIM15 can be sourced from PLLQ (HSI (16MHz) / 1 * 16 / 2 = 128MHz) | |
| 28 | let mut peripheral_config = PeripheralConfig::default(); | 26 | p: None, |
| 29 | peripheral_config.rcc = rcc_config; | 27 | }); |
| 30 | 28 | ||
| 31 | let p = embassy_stm32::init(peripheral_config); | 29 | // configure TIM1 mux to select PLLQ as clock source |
| 32 | 30 | // https://www.st.com/resource/en/reference_manual/rm0444-stm32g0x1-advanced-armbased-32bit-mcus-stmicroelectronics.pdf | |
| 33 | // configure TIM1 mux to select PLLQ as clock source | 31 | // RM0444 page 210 |
| 34 | // https://www.st.com/resource/en/reference_manual/rm0444-stm32g0x1-advanced-armbased-32bit-mcus-stmicroelectronics.pdf | 32 | // RCC - Peripherals Independent Clock Control Register - bit 22 -> 1 |
| 35 | // RM0444 page 210 | 33 | config.rcc.mux.tim1sel = embassy_stm32::rcc::mux::Tim1sel::PLL1_Q; |
| 36 | // RCC - Peripherals Independent Clock Control Register - bit 22 -> 1 | 34 | } |
| 37 | pac::RCC.ccipr().modify(|w| w.set_tim1sel(Tim1sel::PLL1_Q)); | 35 | let p = embassy_stm32::init(config); |
| 38 | 36 | ||
| 39 | let ch1 = PwmPin::new_ch1(p.PA8, OutputType::PushPull); | 37 | let ch1 = PwmPin::new_ch1(p.PA8, OutputType::PushPull); |
| 40 | let ch1n = ComplementaryPwmPin::new_ch1(p.PA7, OutputType::PushPull); | 38 | let ch1n = ComplementaryPwmPin::new_ch1(p.PA7, OutputType::PushPull); |
diff --git a/examples/stm32g0/src/bin/usb_serial.rs b/examples/stm32g0/src/bin/usb_serial.rs index f5aaa5624..8b9915626 100644 --- a/examples/stm32g0/src/bin/usb_serial.rs +++ b/examples/stm32g0/src/bin/usb_serial.rs | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | use defmt::{panic, *}; | 4 | use defmt::{panic, *}; |
| 5 | use embassy_executor::Spawner; | 5 | use embassy_executor::Spawner; |
| 6 | use embassy_futures::join::join; | 6 | use embassy_futures::join::join; |
| 7 | use embassy_stm32::rcc::{Hsi48Config, UsbSrc}; | ||
| 8 | use embassy_stm32::usb::{Driver, Instance}; | 7 | use embassy_stm32::usb::{Driver, Instance}; |
| 9 | use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; | 8 | use embassy_stm32::{bind_interrupts, peripherals, usb, Config}; |
| 10 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; | 9 | use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; |
| @@ -19,10 +18,11 @@ bind_interrupts!(struct Irqs { | |||
| 19 | #[embassy_executor::main] | 18 | #[embassy_executor::main] |
| 20 | async fn main(_spawner: Spawner) { | 19 | async fn main(_spawner: Spawner) { |
| 21 | let mut config = Config::default(); | 20 | let mut config = Config::default(); |
| 22 | config.rcc.usb_src = Some(UsbSrc::Hsi48(Hsi48Config { | 21 | { |
| 23 | sync_from_usb: true, | 22 | use embassy_stm32::rcc::*; |
| 24 | ..Default::default() | 23 | config.rcc.hsi48 = Some(Hsi48Config { sync_from_usb: true }); |
| 25 | })); | 24 | config.rcc.mux.usbsel = mux::Usbsel::HSI48; |
| 25 | } | ||
| 26 | let p = embassy_stm32::init(config); | 26 | let p = embassy_stm32::init(config); |
| 27 | 27 | ||
| 28 | info!("Hello World!"); | 28 | info!("Hello World!"); |
