summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorchemicstry <chemicstry@gmail.com>2022-08-04 03:31:59 +0300
committerchemicstry <chemicstry@gmail.com>2022-08-04 03:31:59 +0300
commit8a25906eff30951e68969c67aabc16ac55826c39 (patch)
tree98e1690a5220350ceb320e87b18ac388141abab5 /examples
parent206b7fd8edd6503ddf728d9c232ad395896990e4 (diff)
downloadembassy-8a25906eff30951e68969c67aabc16ac55826c39.zip
Add DACv1 example for F4
Diffstat (limited to 'examples')
-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 6e77497a..9ce553b6 100644
--- a/examples/stm32f1/Cargo.toml
+++ b/examples/stm32f1/Cargo.toml
@@ -20,7 +20,6 @@ panic-probe = { version = "0.3", features = ["print-defmt"] }
futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
heapless = { version = "0.7.5", default-features = false }
nb = "1.0.0"
-micromath = "2.0.0"
[profile.dev]
opt-level = "s"
diff --git a/examples/stm32f4/Cargo.toml b/examples/stm32f4/Cargo.toml
index 37464b1e..3c58320d 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
heapless = { version = "0.7.5", default-features = false }
nb = "1.0.0"
embedded-storage = "0.3.0"
+micromath = "2.0.0"
usb-device = "0.2"
usbd-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 00000000..392f5bf4
--- /dev/null
+++ b/examples/stm32f4/src/bin/dac.rs
@@ -0,0 +1,37 @@
+#![no_std]
+#![no_main]
+#![feature(type_alias_impl_trait)]
+
+use defmt::*;
+use embassy_executor::executor::Spawner;
+use embassy_stm32::dac::{Channel, Dac, Value};
+use embassy_stm32::Peripherals;
+use {defmt_rtt as _, panic_probe as _};
+
+#[embassy_executor::main]
+async fn main(_spawner: Spawner, p: Peripherals) -> ! {
+ info!("Hello World, dude!");
+
+ let mut dac = Dac::new_1ch(p.DAC, p.PA4);
+
+ loop {
+ for v in 0..=255 {
+ unwrap!(dac.set(Channel::Ch1, Value::Bit8(to_sine_wave(v))));
+ unwrap!(dac.trigger(Channel::Ch1));
+ }
+ }
+}
+
+use micromath::F32Ext;
+
+fn to_sine_wave(v: u8) -> u8 {
+ if v >= 128 {
+ // top half
+ let r = 3.14 * ((v - 128) as f32 / 128.0);
+ (r.sin() * 128.0 + 127.0) as u8
+ } else {
+ // bottom half
+ let r = 3.14 + 3.14 * (v as f32 / 128.0);
+ (r.sin() * 128.0 + 127.0) as u8
+ }
+}