diff options
author | chemicstry <chemicstry@gmail.com> | 2022-08-04 03:31:59 +0300 |
---|---|---|
committer | chemicstry <chemicstry@gmail.com> | 2022-08-04 03:31:59 +0300 |
commit | 8a25906eff30951e68969c67aabc16ac55826c39 (patch) | |
tree | 98e1690a5220350ceb320e87b18ac388141abab5 /examples/stm32f4/src/bin | |
parent | 206b7fd8edd6503ddf728d9c232ad395896990e4 (diff) | |
download | embassy-8a25906eff30951e68969c67aabc16ac55826c39.zip |
Add DACv1 example for F4
Diffstat (limited to 'examples/stm32f4/src/bin')
-rw-r--r-- | examples/stm32f4/src/bin/dac.rs | 37 |
1 files changed, 37 insertions, 0 deletions
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 + } +} |