diff options
Diffstat (limited to 'examples/stm32l0/src/bin/button_exti.rs')
-rw-r--r-- | examples/stm32l0/src/bin/button_exti.rs | 64 |
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())); + }) +} |