diff options
| -rw-r--r-- | examples/stm32f1/Cargo.toml | 1 | ||||
| -rw-r--r-- | examples/stm32f4/Cargo.toml | 1 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/dac.rs | 37 |
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"] } | |||
| 20 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } | 20 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } |
| 21 | heapless = { version = "0.7.5", default-features = false } | 21 | heapless = { version = "0.7.5", default-features = false } |
| 22 | nb = "1.0.0" | 22 | nb = "1.0.0" |
| 23 | micromath = "2.0.0" | ||
| 24 | 23 | ||
| 25 | [profile.dev] | 24 | [profile.dev] |
| 26 | opt-level = "s" | 25 | opt-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 | |||
| 21 | heapless = { version = "0.7.5", default-features = false } | 21 | heapless = { version = "0.7.5", default-features = false } |
| 22 | nb = "1.0.0" | 22 | nb = "1.0.0" |
| 23 | embedded-storage = "0.3.0" | 23 | embedded-storage = "0.3.0" |
| 24 | micromath = "2.0.0" | ||
| 24 | 25 | ||
| 25 | usb-device = "0.2" | 26 | usb-device = "0.2" |
| 26 | usbd-serial = "0.1.1" | 27 | 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 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 | |||
| 5 | use defmt::*; | ||
| 6 | use embassy_executor::executor::Spawner; | ||
| 7 | use embassy_stm32::dac::{Channel, Dac, Value}; | ||
| 8 | use embassy_stm32::Peripherals; | ||
| 9 | use {defmt_rtt as _, panic_probe as _}; | ||
| 10 | |||
| 11 | #[embassy_executor::main] | ||
| 12 | async 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 | |||
| 25 | use micromath::F32Ext; | ||
| 26 | |||
| 27 | fn 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 | } | ||
