summaryrefslogtreecommitdiff
path: root/examples/stm32l0/src/bin/button_exti.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/stm32l0/src/bin/button_exti.rs')
-rw-r--r--examples/stm32l0/src/bin/button_exti.rs64
1 files changed, 64 insertions, 0 deletions
diff --git a/examples/stm32l0/src/bin/button_exti.rs b/examples/stm32l0/src/bin/button_exti.rs
new file mode 100644
index 00000000..a7f73494
--- /dev/null
+++ b/examples/stm32l0/src/bin/button_exti.rs
@@ -0,0 +1,64 @@
+#![no_std]
+#![no_main]
+#![feature(trait_alias)]
+#![feature(min_type_alias_impl_trait)]
+#![feature(impl_trait_in_bindings)]
+#![feature(type_alias_impl_trait)]
+#![allow(incomplete_features)]
+
+#[path = "../example_common.rs"]
+mod example_common;
+use embassy::executor::Executor;
+use embassy::time::Clock;
+use embassy::util::Forever;
+use embassy_stm32::exti::ExtiInput;
+use embassy_stm32::gpio::{Input, Pull};
+use embassy_stm32::rcc;
+use embassy_traits::gpio::{WaitForFallingEdge, WaitForRisingEdge};
+use example_common::*;
+
+use cortex_m_rt::entry;
+
+#[embassy::task]
+async fn main_task() {
+ let mut p = embassy_stm32::init(Default::default());
+ let mut rcc = rcc::Rcc::new(p.RCC);
+ rcc.enable_debug_wfe(&mut p.DBGMCU, true);
+ // Enables SYSCFG
+ let _ = rcc.enable_hsi48(&mut p.SYSCFG, p.CRS);
+
+ let button = Input::new(p.PB2, Pull::Up);
+ let mut button = ExtiInput::new(button, p.EXTI2);
+
+ info!("Press the USER button...");
+
+ loop {
+ button.wait_for_falling_edge().await;
+ info!("Pressed!");
+ button.wait_for_rising_edge().await;
+ info!("Released!");
+ }
+}
+
+struct ZeroClock;
+
+impl Clock for ZeroClock {
+ fn now(&self) -> u64 {
+ 0
+ }
+}
+
+static EXECUTOR: Forever<Executor> = Forever::new();
+
+#[entry]
+fn main() -> ! {
+ info!("Hello World!");
+
+ unsafe { embassy::time::set_clock(&ZeroClock) };
+
+ let executor = EXECUTOR.put(Executor::new());
+
+ executor.run(|spawner| {
+ unwrap!(spawner.spawn(main_task()));
+ })
+}