aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorBob McWhirter <[email protected]>2021-08-03 13:57:18 -0400
committerBob McWhirter <[email protected]>2021-08-03 13:57:18 -0400
commitd7409d63e8fc2b69430c769c7090681cea901141 (patch)
tree3ea823e1614ef7e7dfc87d2cb936a3ca84c5c59f /examples
parentad62900a4004f53f7831547bcc75a564d5b8d2ad (diff)
Enhance Rcc configuration to be more fluentish.
Clean up H7 examples to remove all vegan HALs and PACs.
Diffstat (limited to 'examples')
-rw-r--r--examples/stm32h7/Cargo.toml4
-rw-r--r--examples/stm32h7/src/bin/blinky.rs29
-rw-r--r--examples/stm32h7/src/bin/dac.rs43
-rw-r--r--examples/stm32h7/src/bin/spi.rs82
-rw-r--r--examples/stm32h7/src/bin/spi_dma.rs79
-rw-r--r--examples/stm32h7/src/bin/usart.rs31
-rw-r--r--examples/stm32h7/src/bin/usart_dma.rs18
7 files changed, 75 insertions, 211 deletions
diff --git a/examples/stm32h7/Cargo.toml b/examples/stm32h7/Cargo.toml
index 8bc6781e0..f313960f9 100644
--- a/examples/stm32h7/Cargo.toml
+++ b/examples/stm32h7/Cargo.toml
@@ -24,8 +24,8 @@ embassy-hal-common = {version = "0.1.0", path = "../../embassy-hal-common" }
24embassy-net = { path = "../../embassy-net", default-features = false, features = ["defmt-debug", "defmt", "tcp", "medium-ethernet", "pool-16"] } 24embassy-net = { path = "../../embassy-net", default-features = false, features = ["defmt-debug", "defmt", "tcp", "medium-ethernet", "pool-16"] }
25stm32-metapac = { path = "../../stm32-metapac", features = ["stm32h743zi"] } 25stm32-metapac = { path = "../../stm32-metapac", features = ["stm32h743zi"] }
26embassy-macros = { path = "../../embassy-macros" } 26embassy-macros = { path = "../../embassy-macros" }
27stm32h7 = { version = "0.13", features = ["stm32h743"]} 27#stm32h7 = { version = "0.13", features = ["stm32h743"]}
28stm32h7xx-hal = { version = "0.9.0", features = ["stm32h743"] } 28#stm32h7xx-hal = { version = "0.9.0", features = ["stm32h743"] }
29 29
30defmt = "0.2.0" 30defmt = "0.2.0"
31defmt-rtt = "0.2.0" 31defmt-rtt = "0.2.0"
diff --git a/examples/stm32h7/src/bin/blinky.rs b/examples/stm32h7/src/bin/blinky.rs
index 54e139e79..3db265091 100644
--- a/examples/stm32h7/src/bin/blinky.rs
+++ b/examples/stm32h7/src/bin/blinky.rs
@@ -13,38 +13,13 @@ use embedded_hal::digital::v2::OutputPin;
13use example_common::*; 13use example_common::*;
14 14
15use cortex_m_rt::entry; 15use cortex_m_rt::entry;
16use stm32h7::stm32h743 as pac; 16use embassy_stm32::dbgmcu::Dbgmcu;
17
18use hal::prelude::*;
19use stm32h7xx_hal as hal;
20 17
21#[entry] 18#[entry]
22fn main() -> ! { 19fn main() -> ! {
23 info!("Hello World!"); 20 info!("Hello World!");
24 21
25 let pp = pac::Peripherals::take().unwrap(); 22 unsafe { Dbgmcu::enable_all() };
26
27 let pwrcfg = pp.PWR.constrain().freeze();
28
29 let rcc = pp.RCC.constrain();
30
31 rcc.sys_ck(96.mhz())
32 .pclk1(48.mhz())
33 .pclk2(48.mhz())
34 .pclk3(48.mhz())
35 .pclk4(48.mhz())
36 .pll1_q_ck(48.mhz())
37 .freeze(pwrcfg, &pp.SYSCFG);
38
39 let pp = unsafe { pac::Peripherals::steal() };
40
41 pp.DBGMCU.cr.modify(|_, w| {
42 w.dbgsleep_d1().set_bit();
43 w.dbgstby_d1().set_bit();
44 w.dbgstop_d1().set_bit();
45 w.d1dbgcken().set_bit();
46 w
47 });
48 23
49 let p = embassy_stm32::init(Default::default()); 24 let p = embassy_stm32::init(Default::default());
50 25
diff --git a/examples/stm32h7/src/bin/dac.rs b/examples/stm32h7/src/bin/dac.rs
index 330f69aa1..f1df5425d 100644
--- a/examples/stm32h7/src/bin/dac.rs
+++ b/examples/stm32h7/src/bin/dac.rs
@@ -13,44 +13,24 @@ use embassy_stm32::gpio::NoPin;
13use example_common::*; 13use example_common::*;
14 14
15use cortex_m_rt::entry; 15use cortex_m_rt::entry;
16use embassy_stm32::Config;
17use embassy_stm32::rcc;
16use embassy_stm32::dac::{Channel, Dac, Value}; 18use embassy_stm32::dac::{Channel, Dac, Value};
17use stm32h7::stm32h743 as pac; 19use embassy_stm32::time::U32Ext;
18use stm32h7xx_hal::prelude::*;
19 20
20#[entry] 21#[entry]
21fn main() -> ! { 22fn main() -> ! {
22 info!("Hello World, dude!"); 23 info!("Hello World, dude!");
23 24
24 let pp = pac::Peripherals::take().unwrap(); 25 let p = embassy_stm32::init(Config::default().rcc(
26 rcc::Config::default()
27 .sys_ck(400.mhz())
28 .pll1_q(100.mhz())
29 ));
25 30
26 let pwrcfg = pp.PWR.constrain().freeze(); 31 unsafe {
27 32 Dbgmcu::enable_all();
28 let rcc = pp.RCC.constrain(); 33 }
29
30 rcc.sys_ck(96.mhz())
31 .pclk1(48.mhz())
32 .pclk2(48.mhz())
33 .pclk3(48.mhz())
34 .pclk4(48.mhz())
35 .pll1_q_ck(48.mhz())
36 .freeze(pwrcfg, &pp.SYSCFG);
37
38 let pp = unsafe { pac::Peripherals::steal() };
39
40 pp.DBGMCU.cr.modify(|_, w| {
41 w.dbgsleep_d1().set_bit();
42 w.dbgstby_d1().set_bit();
43 w.dbgstop_d1().set_bit();
44 w.d1dbgcken().set_bit();
45 w
46 });
47
48 pp.RCC.apb1lenr.modify(|_, w| {
49 w.dac12en().set_bit();
50 w
51 });
52
53 let p = embassy_stm32::init(Default::default());
54 34
55 let mut dac = Dac::new(p.DAC1, p.PA4, NoPin); 35 let mut dac = Dac::new(p.DAC1, p.PA4, NoPin);
56 36
@@ -63,6 +43,7 @@ fn main() -> ! {
63} 43}
64 44
65use micromath::F32Ext; 45use micromath::F32Ext;
46use embassy_stm32::dbgmcu::Dbgmcu;
66 47
67fn to_sine_wave(v: u8) -> u8 { 48fn to_sine_wave(v: u8) -> u8 {
68 if v >= 128 { 49 if v >= 128 {
diff --git a/examples/stm32h7/src/bin/spi.rs b/examples/stm32h7/src/bin/spi.rs
index ac483a311..ee11d32ec 100644
--- a/examples/stm32h7/src/bin/spi.rs
+++ b/examples/stm32h7/src/bin/spi.rs
@@ -12,35 +12,23 @@ mod example_common;
12use core::fmt::Write; 12use core::fmt::Write;
13use embassy::executor::Executor; 13use embassy::executor::Executor;
14use embassy::time::Clock; 14use embassy::time::Clock;
15use embassy_stm32::Config;
15use embassy::util::Forever; 16use embassy::util::Forever;
16use embassy_stm32::dma::NoDma; 17use embassy_stm32::dma::NoDma;
18use embassy_stm32::spi;
19use embassy_stm32::rcc;
17use example_common::*; 20use example_common::*;
18use embedded_hal::blocking::spi::Transfer; 21use embedded_hal::blocking::spi::Transfer;
19 22
20use hal::prelude::*;
21use stm32h7xx_hal as hal;
22
23use cortex_m_rt::entry; 23use cortex_m_rt::entry;
24use stm32h7::stm32h743 as pac;
25use heapless::String; 24use heapless::String;
26use embassy_stm32::spi::{Spi, Config}; 25use embassy_stm32::time::U32Ext;
27use embassy_stm32::time::Hertz; 26use embassy_stm32::peripherals::SPI3;
27use embassy_stm32::dbgmcu::Dbgmcu;
28use core::str::from_utf8;
28 29
29#[embassy::task] 30#[embassy::task]
30async fn main_task() { 31async fn main_task(mut spi: spi::Spi<'static, SPI3, NoDma, NoDma>) {
31 let p = embassy_stm32::init(Default::default());
32
33 let mut spi = Spi::new(
34 p.SPI3,
35 p.PB3,
36 p.PB5,
37 p.PB4,
38 NoDma,
39 NoDma,
40 Hertz(1_000_000),
41 Config::default(),
42 );
43
44 for n in 0u32.. { 32 for n in 0u32.. {
45 let mut write: String<128> = String::new(); 33 let mut write: String<128> = String::new();
46 core::write!(&mut write, "Hello DMA World {}!\r\n", n).unwrap(); 34 core::write!(&mut write, "Hello DMA World {}!\r\n", n).unwrap();
@@ -50,7 +38,7 @@ async fn main_task() {
50 defmt::panic!("crap"); 38 defmt::panic!("crap");
51 } 39 }
52 } 40 }
53 info!("read via spi: {}", write.as_bytes()); 41 info!("read via spi: {}", from_utf8(write.as_bytes()).unwrap());
54 } 42 }
55} 43}
56 44
@@ -68,45 +56,31 @@ static EXECUTOR: Forever<Executor> = Forever::new();
68fn main() -> ! { 56fn main() -> ! {
69 info!("Hello World!"); 57 info!("Hello World!");
70 58
71 let pp = pac::Peripherals::take().unwrap(); 59 unsafe {
72 60 Dbgmcu::enable_all();
73 let pwrcfg = pp.PWR.constrain().freeze(); 61 }
74
75 let rcc = pp.RCC.constrain();
76
77 rcc.sys_ck(96.mhz())
78 .pclk1(48.mhz())
79 .pclk2(48.mhz())
80 .pclk3(48.mhz())
81 .pclk4(48.mhz())
82 .pll1_q_ck(48.mhz())
83 .freeze(pwrcfg, &pp.SYSCFG);
84
85 let pp = unsafe { pac::Peripherals::steal() };
86 62
87 pp.DBGMCU.cr.modify(|_, w| { 63 let p = embassy_stm32::init(Config::default().rcc(
88 w.dbgsleep_d1().set_bit(); 64 rcc::Config::default()
89 w.dbgstby_d1().set_bit(); 65 .sys_ck(400.mhz())
90 w.dbgstop_d1().set_bit(); 66 .pll1_q(100.mhz())
91 w.d1dbgcken().set_bit(); 67 ));
92 w
93 });
94 68
95 pp.RCC.ahb4enr.modify(|_, w| { 69 let spi = spi::Spi::new(
96 w.gpioaen().set_bit(); 70 p.SPI3,
97 w.gpioben().set_bit(); 71 p.PB3,
98 w.gpiocen().set_bit(); 72 p.PB5,
99 w.gpioden().set_bit(); 73 p.PB4,
100 w.gpioeen().set_bit(); 74 NoDma,
101 w.gpiofen().set_bit(); 75 NoDma,
102 w 76 1.mhz(),
103 }); 77 spi::Config::default(),
78 );
104 79
105 unsafe { embassy::time::set_clock(&ZeroClock) }; 80 unsafe { embassy::time::set_clock(&ZeroClock) };
106
107 let executor = EXECUTOR.put(Executor::new()); 81 let executor = EXECUTOR.put(Executor::new());
108 82
109 executor.run(|spawner| { 83 executor.run(|spawner| {
110 unwrap!(spawner.spawn(main_task())); 84 unwrap!(spawner.spawn(main_task(spi)));
111 }) 85 })
112} 86}
diff --git a/examples/stm32h7/src/bin/spi_dma.rs b/examples/stm32h7/src/bin/spi_dma.rs
index 9dbfd0960..eb213f650 100644
--- a/examples/stm32h7/src/bin/spi_dma.rs
+++ b/examples/stm32h7/src/bin/spi_dma.rs
@@ -11,34 +11,22 @@ mod example_common;
11use core::fmt::Write; 11use core::fmt::Write;
12use embassy::executor::Executor; 12use embassy::executor::Executor;
13use embassy::time::Clock; 13use embassy::time::Clock;
14use embassy_stm32::time::U32Ext;
14use embassy::util::Forever; 15use embassy::util::Forever;
15use example_common::*; 16use example_common::*;
16use embassy_traits::spi::FullDuplex; 17use embassy_traits::spi::FullDuplex;
17 18
18use hal::prelude::*;
19use stm32h7xx_hal as hal;
20
21use cortex_m_rt::entry; 19use cortex_m_rt::entry;
22use stm32h7::stm32h743 as pac;
23use heapless::String; 20use heapless::String;
24use embassy_stm32::spi::{Spi, Config}; 21use embassy_stm32::spi;
25use embassy_stm32::time::Hertz; 22use embassy_stm32::Config;
26use core::str::from_utf8; 23use core::str::from_utf8;
24use embassy_stm32::dbgmcu::Dbgmcu;
25use embassy_stm32::rcc;
26use embassy_stm32::peripherals::{DMA1_CH4, DMA1_CH3, SPI3};
27 27
28#[embassy::task] 28#[embassy::task]
29async fn main_task() { 29async fn main_task(mut spi: spi::Spi<'static, SPI3, DMA1_CH3, DMA1_CH4>) {
30 let p = embassy_stm32::init(Default::default());
31
32 let mut spi = Spi::new(
33 p.SPI3,
34 p.PB3,
35 p.PB5,
36 p.PB4,
37 p.DMA1_CH3,
38 p.DMA1_CH4,
39 Hertz(1_000_000),
40 Config::default(),
41 );
42 30
43 for n in 0u32.. { 31 for n in 0u32.. {
44 let mut write: String<128> = String::new(); 32 let mut write: String<128> = String::new();
@@ -61,49 +49,36 @@ impl Clock for ZeroClock {
61 49
62static EXECUTOR: Forever<Executor> = Forever::new(); 50static EXECUTOR: Forever<Executor> = Forever::new();
63 51
52
64#[entry] 53#[entry]
65fn main() -> ! { 54fn main() -> ! {
66 info!("Hello World!"); 55 info!("Hello World!");
67 56
68 let pp = pac::Peripherals::take().unwrap(); 57 unsafe {
69 58 Dbgmcu::enable_all();
70 let pwrcfg = pp.PWR.constrain().freeze(); 59 }
71
72 let rcc = pp.RCC.constrain();
73
74 rcc.sys_ck(96.mhz())
75 .pclk1(48.mhz())
76 .pclk2(48.mhz())
77 .pclk3(48.mhz())
78 .pclk4(48.mhz())
79 .pll1_q_ck(48.mhz())
80 .freeze(pwrcfg, &pp.SYSCFG);
81
82 let pp = unsafe { pac::Peripherals::steal() };
83 60
84 pp.DBGMCU.cr.modify(|_, w| { 61 let p = embassy_stm32::init(Config::default().rcc(
85 w.dbgsleep_d1().set_bit(); 62 rcc::Config::default()
86 w.dbgstby_d1().set_bit(); 63 .sys_ck(400.mhz())
87 w.dbgstop_d1().set_bit(); 64 .pll1_q(100.mhz())
88 w.d1dbgcken().set_bit(); 65 ));
89 w
90 });
91 66
92 pp.RCC.ahb4enr.modify(|_, w| { 67 let spi = spi::Spi::new(
93 w.gpioaen().set_bit(); 68 p.SPI3,
94 w.gpioben().set_bit(); 69 p.PB3,
95 w.gpiocen().set_bit(); 70 p.PB5,
96 w.gpioden().set_bit(); 71 p.PB4,
97 w.gpioeen().set_bit(); 72 p.DMA1_CH3,
98 w.gpiofen().set_bit(); 73 p.DMA1_CH4,
99 w 74 1.mhz(),
100 }); 75 spi::Config::default(),
76 );
101 77
102 unsafe { embassy::time::set_clock(&ZeroClock) }; 78 unsafe { embassy::time::set_clock(&ZeroClock) };
103
104 let executor = EXECUTOR.put(Executor::new()); 79 let executor = EXECUTOR.put(Executor::new());
105 80
106 executor.run(|spawner| { 81 executor.run(|spawner| {
107 unwrap!(spawner.spawn(main_task())); 82 unwrap!(spawner.spawn(main_task(spi)));
108 }) 83 })
109} 84}
diff --git a/examples/stm32h7/src/bin/usart.rs b/examples/stm32h7/src/bin/usart.rs
index 11e04f33c..ce33f201a 100644
--- a/examples/stm32h7/src/bin/usart.rs
+++ b/examples/stm32h7/src/bin/usart.rs
@@ -16,11 +16,8 @@ use embassy_stm32::dma::NoDma;
16use embassy_stm32::usart::{Config, Uart}; 16use embassy_stm32::usart::{Config, Uart};
17use example_common::*; 17use example_common::*;
18 18
19use hal::prelude::*;
20use stm32h7xx_hal as hal;
21
22use cortex_m_rt::entry; 19use cortex_m_rt::entry;
23use stm32h7::stm32h743 as pac; 20use embassy_stm32::dbgmcu::Dbgmcu;
24 21
25#[embassy::task] 22#[embassy::task]
26async fn main_task() { 23async fn main_task() {
@@ -53,29 +50,9 @@ static EXECUTOR: Forever<Executor> = Forever::new();
53fn main() -> ! { 50fn main() -> ! {
54 info!("Hello World!"); 51 info!("Hello World!");
55 52
56 let pp = pac::Peripherals::take().unwrap(); 53 unsafe {
57 54 Dbgmcu::enable_all();
58 let pwrcfg = pp.PWR.constrain().freeze(); 55 }
59
60 let rcc = pp.RCC.constrain();
61
62 rcc.sys_ck(96.mhz())
63 .pclk1(48.mhz())
64 .pclk2(48.mhz())
65 .pclk3(48.mhz())
66 .pclk4(48.mhz())
67 .pll1_q_ck(48.mhz())
68 .freeze(pwrcfg, &pp.SYSCFG);
69
70 let pp = unsafe { pac::Peripherals::steal() };
71
72 pp.DBGMCU.cr.modify(|_, w| {
73 w.dbgsleep_d1().set_bit();
74 w.dbgstby_d1().set_bit();
75 w.dbgstop_d1().set_bit();
76 w.d1dbgcken().set_bit();
77 w
78 });
79 56
80 unsafe { embassy::time::set_clock(&ZeroClock) }; 57 unsafe { embassy::time::set_clock(&ZeroClock) };
81 58
diff --git a/examples/stm32h7/src/bin/usart_dma.rs b/examples/stm32h7/src/bin/usart_dma.rs
index fe59a2162..553cf506f 100644
--- a/examples/stm32h7/src/bin/usart_dma.rs
+++ b/examples/stm32h7/src/bin/usart_dma.rs
@@ -18,12 +18,8 @@ use embassy_stm32::usart::{Config, Uart};
18use embassy_traits::uart::Write as _Write; 18use embassy_traits::uart::Write as _Write;
19use example_common::*; 19use example_common::*;
20 20
21use hal::prelude::*;
22use stm32h7xx_hal as hal;
23
24use cortex_m_rt::entry; 21use cortex_m_rt::entry;
25use heapless::String; 22use heapless::String;
26use stm32h7::stm32h743 as pac;
27 23
28#[embassy::task] 24#[embassy::task]
29async fn main_task() { 25async fn main_task() {
@@ -56,20 +52,6 @@ static EXECUTOR: Forever<Executor> = Forever::new();
56fn main() -> ! { 52fn main() -> ! {
57 info!("Hello World!"); 53 info!("Hello World!");
58 54
59 let pp = pac::Peripherals::take().unwrap();
60
61 let pwrcfg = pp.PWR.constrain().freeze();
62
63 let rcc = pp.RCC.constrain();
64
65 rcc.sys_ck(96.mhz())
66 .pclk1(48.mhz())
67 .pclk2(48.mhz())
68 .pclk3(48.mhz())
69 .pclk4(48.mhz())
70 .pll1_q_ck(48.mhz())
71 .freeze(pwrcfg, &pp.SYSCFG);
72
73 unsafe { 55 unsafe {
74 Dbgmcu::enable_all(); 56 Dbgmcu::enable_all();
75 } 57 }