Skip to content

Commit 06afef4

Browse files
committed
examples: add rcc and fractional-pll examples
1 parent 254965d commit 06afef4

File tree

4 files changed

+107
-1
lines changed

4 files changed

+107
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ paste = "1.0.15"
4444
log = { version = "0.4.20", optional = true}
4545

4646
[dev-dependencies]
47+
log = { version = "0.4.20"}
4748
cortex-m-rt = "0.7.3"
4849
panic-halt = "0.2.0"
4950
panic-rtt-target = { version = "0.1.0", features = ["cortex-m"] }

examples/blinky.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ fn main() -> ! {
1313
let dp = pac::Peripherals::take().unwrap();
1414

1515
let pwr = dp.PWR.constrain();
16-
let _pwrcfg = pwr.vos0().freeze();
16+
let pwrcfg = pwr.vos0().freeze();
17+
18+
// Constrain and Freeze clock
19+
let rcc = dp.RCC.constrain();
20+
let _ccdr = rcc.sys_ck(250.MHz()).freeze(pwrcfg, &dp.SBS);
1721

1822
dp.GPIOA.moder().write(|w| w.mode5().output()); // output
1923
dp.GPIOA.pupdr().write(|w| w.pupd5().pull_up()); // pull-up

examples/fractional-pll.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#![deny(warnings)]
2+
#![no_main]
3+
#![no_std]
4+
5+
#[macro_use]
6+
mod utilities;
7+
8+
use cortex_m_rt::entry;
9+
use log::info;
10+
use stm32h5xx_hal::rcc;
11+
use stm32h5xx_hal::{pac, prelude::*};
12+
13+
#[entry]
14+
fn main() -> ! {
15+
utilities::logger::init();
16+
let dp = pac::Peripherals::take().unwrap();
17+
18+
// Constrain and Freeze power
19+
info!("Setup PWR... ");
20+
let pwr = dp.PWR.constrain();
21+
let pwrcfg = pwr.vos0().freeze();
22+
23+
// Constrain and Freeze clock
24+
info!("Setup RCC... ");
25+
let rcc = dp.RCC.constrain();
26+
let ccdr = rcc
27+
.sys_ck(250.MHz())
28+
.pll2_strategy(rcc::PllConfigStrategy::Fractional)
29+
.pll2_p_ck(12_288_000.Hz())
30+
.pll2_q_ck(6_144_000.Hz())
31+
.pll2_r_ck(3_024_000.Hz())
32+
// pll2_p / 2 --> mco2
33+
.mco2_from_pll2_p_ck(7.MHz())
34+
.freeze(pwrcfg, &dp.SBS);
35+
36+
// // Enable MCO2 output pin
37+
// let gpioc = dp.GPIOC.split(ccdr.peripheral.GPIOC);
38+
// let _mco2_pin = gpioc.pc9.into_alternate::<0>().speed(Speed::High);
39+
40+
info!("");
41+
info!("stm32h5xx-hal example - Fractional PLL");
42+
info!("");
43+
44+
// SYS_CK
45+
info!("sys_ck = {} Hz", ccdr.clocks.sys_ck().raw());
46+
assert_eq!(ccdr.clocks.sys_ck().raw(), 250_000_000);
47+
48+
info!("pll2_p_ck = {}", ccdr.clocks.pll2_p_ck().unwrap());
49+
info!("pll2_q_ck = {}", ccdr.clocks.pll2_q_ck().unwrap());
50+
info!("pll2_r_ck = {}", ccdr.clocks.pll2_r_ck().unwrap());
51+
52+
let _mco2_ck = ccdr.clocks.mco2_ck().unwrap().raw();
53+
54+
loop {
55+
cortex_m::asm::nop()
56+
}
57+
}

examples/rcc.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#![deny(warnings)]
2+
#![no_main]
3+
#![no_std]
4+
5+
#[macro_use]
6+
mod utilities;
7+
8+
use log::info;
9+
10+
use cortex_m_rt::entry;
11+
use stm32h5xx_hal::{pac, prelude::*};
12+
13+
#[entry]
14+
fn main() -> ! {
15+
utilities::logger::init();
16+
17+
let dp = pac::Peripherals::take().unwrap();
18+
19+
// Constrain and Freeze power
20+
info!("Setup PWR... ");
21+
let pwr = dp.PWR.constrain();
22+
let pwrcfg = pwr.vos0().freeze();
23+
24+
// Constrain and Freeze clock
25+
info!("Setup RCC... ");
26+
let rcc = dp.RCC.constrain();
27+
let ccdr = rcc.sys_ck(250.MHz()).freeze(pwrcfg, &dp.SBS);
28+
29+
info!("");
30+
info!("stm32h5xx-hal example - RCC");
31+
info!("");
32+
33+
// HCLK
34+
info!("hclk = {} Hz", ccdr.clocks.hclk().raw());
35+
assert_eq!(ccdr.clocks.hclk().raw(), 250_000_000);
36+
37+
// SYS_CK
38+
info!("sys_ck = {} Hz", ccdr.clocks.sys_ck().raw());
39+
assert_eq!(ccdr.clocks.sys_ck().raw(), 250_000_000);
40+
41+
loop {
42+
cortex_m::asm::nop()
43+
}
44+
}

0 commit comments

Comments
 (0)