aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-08-08 11:37:41 +0000
committerGitHub <[email protected]>2022-08-08 11:37:41 +0000
commitb7b4c84067e0e85fa641a540458438297176f2e4 (patch)
tree73a659ae11498729a252cddc4e48b57e4ed6176a /examples
parentb400e6aa75f8b629a948c891447e2aab49f57a42 (diff)
parented74bcb8d8b3414dc041ee0cbdf544a6604a5f25 (diff)
Merge #892
892: Merge v1, v2 DAC and update register definitions r=Dirbaio a=chemicstry This merges v1 (unimplemented) and v2 DAC implementations, because they share most of the code except for some exotic stuff, which is not yet implemented for neither of the versions. This should allow using DAC on all chips that have v1 peripheral. ~Currently blocked on https://github.com/embassy-rs/stm32-data/pull/153~ Co-authored-by: chemicstry <[email protected]>
Diffstat (limited to 'examples')
-rw-r--r--examples/stm32f4/Cargo.toml1
-rw-r--r--examples/stm32f4/src/bin/dac.rs37
2 files changed, 38 insertions, 0 deletions
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}