mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-22 14:53:03 +00:00
f4-rcc: Add option to enable debug_wfe and add hello example
This commit is contained in:
parent
5abaf8e9d6
commit
e7714983b3
@ -24,6 +24,7 @@ pub struct Config {
|
||||
pub hclk: Option<Hertz>,
|
||||
pub pclk1: Option<Hertz>,
|
||||
pub pclk2: Option<Hertz>,
|
||||
pub enable_debug_wfe: bool,
|
||||
}
|
||||
|
||||
/// RCC peripheral
|
||||
@ -68,7 +69,7 @@ impl<'d> Rcc<'d> {
|
||||
} else {
|
||||
sysclk
|
||||
};
|
||||
assert!((SYSCLK_MIN..=SYSCLK_MAX).contains(&sysclk));
|
||||
assert!((SYSCLK_MIN..=SYSCLK_MAX).contains(&sysclk), "sysclk");
|
||||
|
||||
let hclk = self.config.hclk.map(|h| h.0).unwrap_or(sysclk);
|
||||
let (hpre_bits, hpre_div) = match (sysclk + hclk - 1) / hclk {
|
||||
@ -168,6 +169,15 @@ impl<'d> Rcc<'d> {
|
||||
});
|
||||
}
|
||||
|
||||
if self.config.enable_debug_wfe {
|
||||
unsafe {
|
||||
RCC.ahb1enr().modify(|w| w.set_dma1en(true));
|
||||
critical_section::with(|_| {
|
||||
crate::dbgmcu::Dbgmcu::enable_all();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Clocks {
|
||||
sys: Hertz(sysclk),
|
||||
apb1: Hertz(pclk1),
|
||||
@ -237,7 +247,7 @@ impl<'d> Rcc<'d> {
|
||||
.unwrap();
|
||||
|
||||
let vco_in = pllsrcclk / pllm;
|
||||
assert!((1_000_000..=2_000_000).contains(&vco_in));
|
||||
assert!((1_000_000..=2_000_000).contains(&vco_in), "vco_in");
|
||||
|
||||
// Main scaler, must result in >= 100MHz (>= 192MHz for F401)
|
||||
// and <= 432MHz, min 50, max 432
|
||||
@ -256,7 +266,10 @@ impl<'d> Rcc<'d> {
|
||||
} else {
|
||||
sysclk * sysclk_div / vco_in
|
||||
};
|
||||
assert!((192_000_000..=432_000_000).contains(&(vco_in * plln)));
|
||||
assert!(
|
||||
(192_000_000..=432_000_000).contains(&(vco_in * plln)),
|
||||
"plln"
|
||||
);
|
||||
|
||||
let pllp = (sysclk_div / 2) - 1;
|
||||
|
||||
|
34
examples/stm32f4/src/bin/hello.rs
Normal file
34
examples/stm32f4/src/bin/hello.rs
Normal file
@ -0,0 +1,34 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
#![feature(trait_alias)]
|
||||
#![feature(min_type_alias_impl_trait)]
|
||||
#![feature(impl_trait_in_bindings)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
use defmt::{info, panic};
|
||||
use embassy::executor::Spawner;
|
||||
use embassy::time::{Duration, Timer};
|
||||
use embassy_stm32::rcc::Config as RccConfig;
|
||||
use embassy_stm32::time::Hertz;
|
||||
use embassy_stm32::Config;
|
||||
use embassy_stm32::Peripherals;
|
||||
|
||||
#[path = "../example_common.rs"]
|
||||
mod example_common;
|
||||
|
||||
fn config() -> Config {
|
||||
let mut rcc_config = RccConfig::default();
|
||||
rcc_config.sys_ck = Some(Hertz(32_000_000));
|
||||
rcc_config.enable_debug_wfe = true;
|
||||
|
||||
Config::default().rcc(rcc_config)
|
||||
}
|
||||
|
||||
#[embassy::main(config = "config()")]
|
||||
async fn main(_spawner: Spawner, _p: Peripherals) -> ! {
|
||||
loop {
|
||||
info!("Hello World!");
|
||||
Timer::after(Duration::from_secs(1)).await;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user