aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/nrf52840/Cargo.toml2
-rw-r--r--examples/nrf5340/Cargo.toml2
-rw-r--r--examples/rp/Cargo.toml3
-rw-r--r--examples/rp/src/bin/pio_rotary_encoder.rs81
-rw-r--r--examples/rp/src/bin/pwm_input.rs26
-rw-r--r--examples/std/Cargo.toml2
-rw-r--r--examples/stm32f0/Cargo.toml3
-rw-r--r--examples/stm32f3/Cargo.toml2
-rw-r--r--examples/stm32f334/Cargo.toml2
-rw-r--r--examples/stm32f4/Cargo.toml2
-rw-r--r--examples/stm32f7/Cargo.toml2
-rw-r--r--examples/stm32g0/Cargo.toml1
-rw-r--r--examples/stm32h5/Cargo.toml2
-rw-r--r--examples/stm32h7/Cargo.toml2
-rw-r--r--examples/stm32l0/Cargo.toml3
-rw-r--r--examples/stm32l4/Cargo.toml2
-rw-r--r--examples/stm32l5/Cargo.toml2
-rw-r--r--examples/stm32wb/Cargo.toml2
-rw-r--r--examples/stm32wba/Cargo.toml2
19 files changed, 127 insertions, 16 deletions
diff --git a/examples/nrf52840/Cargo.toml b/examples/nrf52840/Cargo.toml
index 0554b7e06..f803adb03 100644
--- a/examples/nrf52840/Cargo.toml
+++ b/examples/nrf52840/Cargo.toml
@@ -48,7 +48,7 @@ defmt = "0.3"
48defmt-rtt = "0.4" 48defmt-rtt = "0.4"
49 49
50fixed = "1.10.0" 50fixed = "1.10.0"
51static_cell = "1.1" 51static_cell = { version = "2" }
52cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } 52cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
53cortex-m-rt = "0.7.0" 53cortex-m-rt = "0.7.0"
54panic-probe = { version = "0.3", features = ["print-defmt"] } 54panic-probe = { version = "0.3", features = ["print-defmt"] }
diff --git a/examples/nrf5340/Cargo.toml b/examples/nrf5340/Cargo.toml
index 9c62508cd..4196d61ab 100644
--- a/examples/nrf5340/Cargo.toml
+++ b/examples/nrf5340/Cargo.toml
@@ -42,7 +42,7 @@ embedded-io-async = { version = "0.6.0" }
42defmt = "0.3" 42defmt = "0.3"
43defmt-rtt = "0.4" 43defmt-rtt = "0.4"
44 44
45static_cell = { version = "1.1", features = ["nightly"]} 45static_cell = { version = "2", features = ["nightly"]}
46cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } 46cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
47cortex-m-rt = "0.7.0" 47cortex-m-rt = "0.7.0"
48panic-probe = { version = "0.3", features = ["print-defmt"] } 48panic-probe = { version = "0.3", features = ["print-defmt"] }
diff --git a/examples/rp/Cargo.toml b/examples/rp/Cargo.toml
index d020a0f5d..fbe7acae1 100644
--- a/examples/rp/Cargo.toml
+++ b/examples/rp/Cargo.toml
@@ -47,7 +47,8 @@ embedded-hal-async = "1.0.0-rc.1"
47embedded-hal-bus = { version = "0.1.0-rc.1", features = ["async"] } 47embedded-hal-bus = { version = "0.1.0-rc.1", features = ["async"] }
48embedded-io-async = { version = "0.6.0", features = ["defmt-03"] } 48embedded-io-async = { version = "0.6.0", features = ["defmt-03"] }
49embedded-storage = { version = "0.3" } 49embedded-storage = { version = "0.3" }
50static_cell = { version = "1.1", features = ["nightly"]} 50static_cell = { version = "2", features = ["nightly"]}
51portable-atomic = { version = "1.5", features = ["critical-section"] }
51log = "0.4" 52log = "0.4"
52pio-proc = "0.2" 53pio-proc = "0.2"
53pio = "0.2.1" 54pio = "0.2.1"
diff --git a/examples/rp/src/bin/pio_rotary_encoder.rs b/examples/rp/src/bin/pio_rotary_encoder.rs
new file mode 100644
index 000000000..6d9d59df6
--- /dev/null
+++ b/examples/rp/src/bin/pio_rotary_encoder.rs
@@ -0,0 +1,81 @@
1//! This example shows how to use the PIO module in the RP2040 to read a quadrature rotary encoder.
2
3#![no_std]
4#![no_main]
5#![feature(type_alias_impl_trait)]
6
7use defmt::info;
8use embassy_executor::Spawner;
9use embassy_rp::gpio::Pull;
10use embassy_rp::peripherals::PIO0;
11use embassy_rp::{bind_interrupts, pio};
12use fixed::traits::ToFixed;
13use pio::{Common, Config, FifoJoin, Instance, InterruptHandler, Pio, PioPin, ShiftDirection, StateMachine};
14use {defmt_rtt as _, panic_probe as _};
15
16bind_interrupts!(struct Irqs {
17 PIO0_IRQ_0 => InterruptHandler<PIO0>;
18});
19
20pub struct PioEncoder<'d, T: Instance, const SM: usize> {
21 sm: StateMachine<'d, T, SM>,
22}
23
24impl<'d, T: Instance, const SM: usize> PioEncoder<'d, T, SM> {
25 pub fn new(
26 pio: &mut Common<'d, T>,
27 mut sm: StateMachine<'d, T, SM>,
28 pin_a: impl PioPin,
29 pin_b: impl PioPin,
30 ) -> Self {
31 let mut pin_a = pio.make_pio_pin(pin_a);
32 let mut pin_b = pio.make_pio_pin(pin_b);
33 pin_a.set_pull(Pull::Up);
34 pin_b.set_pull(Pull::Up);
35 sm.set_pin_dirs(pio::Direction::In, &[&pin_a, &pin_b]);
36
37 let prg = pio_proc::pio_asm!("wait 1 pin 1", "wait 0 pin 1", "in pins, 2", "push",);
38
39 let mut cfg = Config::default();
40 cfg.set_in_pins(&[&pin_a, &pin_b]);
41 cfg.fifo_join = FifoJoin::RxOnly;
42 cfg.shift_in.direction = ShiftDirection::Left;
43 cfg.clock_divider = 10_000.to_fixed();
44 cfg.use_program(&pio.load_program(&prg.program), &[]);
45 sm.set_config(&cfg);
46 sm.set_enable(true);
47 Self { sm }
48 }
49
50 pub async fn read(&mut self) -> Direction {
51 loop {
52 match self.sm.rx().wait_pull().await {
53 0 => return Direction::CounterClockwise,
54 1 => return Direction::Clockwise,
55 _ => {}
56 }
57 }
58 }
59}
60
61pub enum Direction {
62 Clockwise,
63 CounterClockwise,
64}
65
66#[embassy_executor::main]
67async fn main(_spawner: Spawner) {
68 let p = embassy_rp::init(Default::default());
69 let Pio { mut common, sm0, .. } = Pio::new(p.PIO0, Irqs);
70
71 let mut encoder = PioEncoder::new(&mut common, sm0, p.PIN_4, p.PIN_5);
72
73 let mut count = 0;
74 loop {
75 info!("Count: {}", count);
76 count += match encoder.read().await {
77 Direction::Clockwise => 1,
78 Direction::CounterClockwise => -1,
79 };
80 }
81}
diff --git a/examples/rp/src/bin/pwm_input.rs b/examples/rp/src/bin/pwm_input.rs
new file mode 100644
index 000000000..0fc2e40c3
--- /dev/null
+++ b/examples/rp/src/bin/pwm_input.rs
@@ -0,0 +1,26 @@
1//! This example shows how to use the PWM module to measure the frequency of an input signal.
2
3#![no_std]
4#![no_main]
5#![feature(type_alias_impl_trait)]
6
7use defmt::*;
8use embassy_executor::Spawner;
9use embassy_rp::pwm::{Config, InputMode, Pwm};
10use embassy_time::{Duration, Ticker};
11use {defmt_rtt as _, panic_probe as _};
12
13#[embassy_executor::main]
14async fn main(_spawner: Spawner) {
15 let p = embassy_rp::init(Default::default());
16
17 let cfg: Config = Default::default();
18 let pwm = Pwm::new_input(p.PWM_CH2, p.PIN_5, InputMode::RisingEdge, cfg);
19
20 let mut ticker = Ticker::every(Duration::from_secs(1));
21 loop {
22 info!("Input frequency: {} Hz", pwm.counter());
23 pwm.set_counter(0);
24 ticker.next().await;
25 }
26}
diff --git a/examples/std/Cargo.toml b/examples/std/Cargo.toml
index 12ec40fad..99511292f 100644
--- a/examples/std/Cargo.toml
+++ b/examples/std/Cargo.toml
@@ -24,7 +24,7 @@ nix = "0.26.2"
24clap = { version = "3.0.0-beta.5", features = ["derive"] } 24clap = { version = "3.0.0-beta.5", features = ["derive"] }
25rand_core = { version = "0.6.3", features = ["std"] } 25rand_core = { version = "0.6.3", features = ["std"] }
26heapless = { version = "0.7.5", default-features = false } 26heapless = { version = "0.7.5", default-features = false }
27static_cell = { version = "1.1", features = ["nightly"]} 27static_cell = { version = "2", features = ["nightly"]}
28 28
29[profile.release] 29[profile.release]
30debug = 2 30debug = 2
diff --git a/examples/stm32f0/Cargo.toml b/examples/stm32f0/Cargo.toml
index 953fa5845..3f781d762 100644
--- a/examples/stm32f0/Cargo.toml
+++ b/examples/stm32f0/Cargo.toml
@@ -17,7 +17,8 @@ panic-probe = "0.3"
17embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] } 17embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] }
18embassy-executor = { version = "0.3.1", path = "../../embassy-executor", features = ["nightly", "arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] } 18embassy-executor = { version = "0.3.1", path = "../../embassy-executor", features = ["nightly", "arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] }
19embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime", "tick-hz-32_768"] } 19embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime", "tick-hz-32_768"] }
20static_cell = { version = "1.1", features = ["nightly"]} 20static_cell = { version = "2", features = ["nightly"]}
21portable-atomic = { version = "1.5", features = ["unsafe-assume-single-core"] }
21 22
22[profile.release] 23[profile.release]
23debug = 2 24debug = 2
diff --git a/examples/stm32f3/Cargo.toml b/examples/stm32f3/Cargo.toml
index 548191ca6..0ab25c4c2 100644
--- a/examples/stm32f3/Cargo.toml
+++ b/examples/stm32f3/Cargo.toml
@@ -24,7 +24,7 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
24heapless = { version = "0.7.5", default-features = false } 24heapless = { version = "0.7.5", default-features = false }
25nb = "1.0.0" 25nb = "1.0.0"
26embedded-storage = "0.3.0" 26embedded-storage = "0.3.0"
27static_cell = { version = "1.1", features = ["nightly"]} 27static_cell = { version = "2", features = ["nightly"]}
28 28
29[profile.release] 29[profile.release]
30debug = 2 30debug = 2
diff --git a/examples/stm32f334/Cargo.toml b/examples/stm32f334/Cargo.toml
index b42cc9961..b3bfde441 100644
--- a/examples/stm32f334/Cargo.toml
+++ b/examples/stm32f334/Cargo.toml
@@ -23,4 +23,4 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
23heapless = { version = "0.7.5", default-features = false } 23heapless = { version = "0.7.5", default-features = false }
24nb = "1.0.0" 24nb = "1.0.0"
25embedded-storage = "0.3.0" 25embedded-storage = "0.3.0"
26static_cell = { version = "1.1", features = ["nightly"]} 26static_cell = { version = "2", features = ["nightly"]}
diff --git a/examples/stm32f4/Cargo.toml b/examples/stm32f4/Cargo.toml
index 916d0490b..fca182036 100644
--- a/examples/stm32f4/Cargo.toml
+++ b/examples/stm32f4/Cargo.toml
@@ -27,7 +27,7 @@ heapless = { version = "0.7.5", default-features = false }
27nb = "1.0.0" 27nb = "1.0.0"
28embedded-storage = "0.3.0" 28embedded-storage = "0.3.0"
29micromath = "2.0.0" 29micromath = "2.0.0"
30static_cell = { version = "1.1", features = ["nightly"]} 30static_cell = { version = "2", features = ["nightly"]}
31chrono = { version = "^0.4", default-features = false} 31chrono = { version = "^0.4", default-features = false}
32 32
33[profile.release] 33[profile.release]
diff --git a/examples/stm32f7/Cargo.toml b/examples/stm32f7/Cargo.toml
index 35757e623..0a567d046 100644
--- a/examples/stm32f7/Cargo.toml
+++ b/examples/stm32f7/Cargo.toml
@@ -27,7 +27,7 @@ nb = "1.0.0"
27rand_core = "0.6.3" 27rand_core = "0.6.3"
28critical-section = "1.1" 28critical-section = "1.1"
29embedded-storage = "0.3.0" 29embedded-storage = "0.3.0"
30static_cell = { version = "1.1", features = ["nightly"]} 30static_cell = { version = "2", features = ["nightly"]}
31 31
32[profile.release] 32[profile.release]
33debug = 2 33debug = 2
diff --git a/examples/stm32g0/Cargo.toml b/examples/stm32g0/Cargo.toml
index fb7f780f9..42d7d328f 100644
--- a/examples/stm32g0/Cargo.toml
+++ b/examples/stm32g0/Cargo.toml
@@ -20,6 +20,7 @@ embedded-hal = "0.2.6"
20panic-probe = { version = "0.3", features = ["print-defmt"] } 20panic-probe = { version = "0.3", features = ["print-defmt"] }
21futures = { version = "0.3.17", default-features = false, features = ["async-await"] } 21futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
22heapless = { version = "0.7.5", default-features = false } 22heapless = { version = "0.7.5", default-features = false }
23portable-atomic = { version = "1.5", features = ["unsafe-assume-single-core"] }
23 24
24[profile.release] 25[profile.release]
25debug = 2 26debug = 2
diff --git a/examples/stm32h5/Cargo.toml b/examples/stm32h5/Cargo.toml
index c4f41d1cf..db56b685a 100644
--- a/examples/stm32h5/Cargo.toml
+++ b/examples/stm32h5/Cargo.toml
@@ -31,7 +31,7 @@ critical-section = "1.1"
31micromath = "2.0.0" 31micromath = "2.0.0"
32stm32-fmc = "0.3.0" 32stm32-fmc = "0.3.0"
33embedded-storage = "0.3.0" 33embedded-storage = "0.3.0"
34static_cell = { version = "1.1", features = ["nightly"]} 34static_cell = { version = "2", features = ["nightly"]}
35 35
36# cargo build/run 36# cargo build/run
37[profile.dev] 37[profile.dev]
diff --git a/examples/stm32h7/Cargo.toml b/examples/stm32h7/Cargo.toml
index d6b14a602..c300c8644 100644
--- a/examples/stm32h7/Cargo.toml
+++ b/examples/stm32h7/Cargo.toml
@@ -31,7 +31,7 @@ critical-section = "1.1"
31micromath = "2.0.0" 31micromath = "2.0.0"
32stm32-fmc = "0.3.0" 32stm32-fmc = "0.3.0"
33embedded-storage = "0.3.0" 33embedded-storage = "0.3.0"
34static_cell = { version = "1.1", features = ["nightly"]} 34static_cell = { version = "2", features = ["nightly"]}
35chrono = { version = "^0.4", default-features = false } 35chrono = { version = "^0.4", default-features = false }
36 36
37# cargo build/run 37# cargo build/run
diff --git a/examples/stm32l0/Cargo.toml b/examples/stm32l0/Cargo.toml
index edd1d0261..e294d0422 100644
--- a/examples/stm32l0/Cargo.toml
+++ b/examples/stm32l0/Cargo.toml
@@ -33,7 +33,8 @@ panic-probe = { version = "0.3", features = ["print-defmt"] }
33futures = { version = "0.3.17", default-features = false, features = ["async-await"] } 33futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
34heapless = { version = "0.7.5", default-features = false } 34heapless = { version = "0.7.5", default-features = false }
35embedded-hal = "0.2.6" 35embedded-hal = "0.2.6"
36static_cell = "1.1" 36static_cell = { version = "2" }
37portable-atomic = { version = "1.5", features = ["unsafe-assume-single-core"] }
37 38
38[profile.release] 39[profile.release]
39debug = 2 40debug = 2
diff --git a/examples/stm32l4/Cargo.toml b/examples/stm32l4/Cargo.toml
index 2fbba4634..5d79cf1ed 100644
--- a/examples/stm32l4/Cargo.toml
+++ b/examples/stm32l4/Cargo.toml
@@ -32,7 +32,7 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
32heapless = { version = "0.7.5", default-features = false } 32heapless = { version = "0.7.5", default-features = false }
33chrono = { version = "^0.4", default-features = false } 33chrono = { version = "^0.4", default-features = false }
34rand = { version = "0.8.5", default-features = false } 34rand = { version = "0.8.5", default-features = false }
35static_cell = {version = "1.1", features = ["nightly"]} 35static_cell = { version = "2", features = ["nightly"]}
36 36
37micromath = "2.0.0" 37micromath = "2.0.0"
38 38
diff --git a/examples/stm32l5/Cargo.toml b/examples/stm32l5/Cargo.toml
index 2457b40d7..1cd32892d 100644
--- a/examples/stm32l5/Cargo.toml
+++ b/examples/stm32l5/Cargo.toml
@@ -26,7 +26,7 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
26heapless = { version = "0.7.5", default-features = false } 26heapless = { version = "0.7.5", default-features = false }
27rand_core = { version = "0.6.3", default-features = false } 27rand_core = { version = "0.6.3", default-features = false }
28embedded-io-async = { version = "0.6.0" } 28embedded-io-async = { version = "0.6.0" }
29static_cell = { version = "1.1", features = ["nightly"]} 29static_cell = { version = "2", features = ["nightly"]}
30 30
31[profile.release] 31[profile.release]
32debug = 2 32debug = 2
diff --git a/examples/stm32wb/Cargo.toml b/examples/stm32wb/Cargo.toml
index 5864906d0..daacc11c4 100644
--- a/examples/stm32wb/Cargo.toml
+++ b/examples/stm32wb/Cargo.toml
@@ -22,7 +22,7 @@ embedded-hal = "0.2.6"
22panic-probe = { version = "0.3", features = ["print-defmt"] } 22panic-probe = { version = "0.3", features = ["print-defmt"] }
23futures = { version = "0.3.17", default-features = false, features = ["async-await"] } 23futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
24heapless = { version = "0.7.5", default-features = false } 24heapless = { version = "0.7.5", default-features = false }
25static_cell = { version = "1.1", features = ["nightly"]} 25static_cell = { version = "2", features = ["nightly"]}
26 26
27[features] 27[features]
28default = ["ble", "mac"] 28default = ["ble", "mac"]
diff --git a/examples/stm32wba/Cargo.toml b/examples/stm32wba/Cargo.toml
index 12e0e5ab0..c52848500 100644
--- a/examples/stm32wba/Cargo.toml
+++ b/examples/stm32wba/Cargo.toml
@@ -20,7 +20,7 @@ embedded-hal = "0.2.6"
20panic-probe = { version = "0.3", features = ["print-defmt"] } 20panic-probe = { version = "0.3", features = ["print-defmt"] }
21futures = { version = "0.3.17", default-features = false, features = ["async-await"] } 21futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
22heapless = { version = "0.7.5", default-features = false } 22heapless = { version = "0.7.5", default-features = false }
23static_cell = { version = "1.1", features = ["nightly"]} 23static_cell = { version = "2", features = ["nightly"]}
24 24
25[profile.release] 25[profile.release]
26debug = 2 26debug = 2