aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/stm32f1/Cargo.toml1
-rw-r--r--examples/stm32f4/Cargo.toml1
-rw-r--r--examples/stm32f4/src/bin/dac.rs37
3 files changed, 38 insertions, 1 deletions
diff --git a/examples/stm32f1/Cargo.toml b/examples/stm32f1/Cargo.toml
index 6e77497ae..9ce553b6d 100644
--- a/examples/stm32f1/Cargo.toml
+++ b/examples/stm32f1/Cargo.toml
@@ -20,7 +20,6 @@ panic-probe = { version = "0.3", features = ["print-defmt"] }
20futures = { version = "0.3.17", default-features = false, features = ["async-await"] } 20futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
21heapless = { version = "0.7.5", default-features = false } 21heapless = { version = "0.7.5", default-features = false }
22nb = "1.0.0" 22nb = "1.0.0"
23micromath = "2.0.0"
24 23
25[profile.dev] 24[profile.dev]
26opt-level = "s" 25opt-level = "s"
diff --git a/examples/stm32f4/Cargo.toml b/examples/stm32f4/Cargo.toml
index 37464b1e0..3c58320dd 100644
--- a/examples/stm32f4/Cargo.toml
+++ b/examples/stm32f4/Cargo.toml
@@ -21,6 +21,7 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
21heapless = { version = "0.7.5", default-features = false } 21heapless = { version = "0.7.5", default-features = false }
22nb = "1.0.0" 22nb = "1.0.0"
23embedded-storage = "0.3.0" 23embedded-storage = "0.3.0"
24micromath = "2.0.0"
24 25
25usb-device = "0.2" 26usb-device = "0.2"
26usbd-serial = "0.1.1" 27usbd-serial = "0.1.1"
diff --git a/examples/stm32f4/src/bin/dac.rs b/examples/stm32f4/src/bin/dac.rs
new file mode 100644
index 000000000..392f5bf4d
--- /dev/null
+++ b/examples/stm32f4/src/bin/dac.rs
@@ -0,0 +1,37 @@
1#![no_std]
2#![no_main]
3#![feature(type_alias_impl_trait)]
4
5use defmt::*;
6use embassy_executor::executor::Spawner;
7use embassy_stm32::dac::{Channel, Dac, Value};
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _};
10
11#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) -> ! {
13 info!("Hello World, dude!");
14
15 let mut dac = Dac::new_1ch(p.DAC, p.PA4);
16
17 loop {
18 for v in 0..=255 {
19 unwrap!(dac.set(Channel::Ch1, Value::Bit8(to_sine_wave(v))));
20 unwrap!(dac.trigger(Channel::Ch1));
21 }
22 }
23}
24
25use micromath::F32Ext;
26
27fn to_sine_wave(v: u8) -> u8 {
28 if v >= 128 {
29 // top half
30 let r = 3.14 * ((v - 128) as f32 / 128.0);
31 (r.sin() * 128.0 + 127.0) as u8
32 } else {
33 // bottom half
34 let r = 3.14 + 3.14 * (v as f32 / 128.0);
35 (r.sin() * 128.0 + 127.0) as u8
36 }
37}