From cad43587e6d63d015e7f3c3d59e6dcfbe70a2ee9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Kr=C3=B6ger?= <timokroeger93@gmail.com>
Date: Thu, 29 Jul 2021 16:01:08 +0200
Subject: [PATCH] stm32l0: Use `embassy::main` for examples

---
 embassy-stm32/src/rcc/l0/mod.rs         |  7 ++---
 examples/stm32l0/src/bin/blinky.rs      | 23 +++++++--------
 examples/stm32l0/src/bin/button_exti.rs | 38 ++++---------------------
 3 files changed, 19 insertions(+), 49 deletions(-)

diff --git a/embassy-stm32/src/rcc/l0/mod.rs b/embassy-stm32/src/rcc/l0/mod.rs
index ef8286e25..290449e19 100644
--- a/embassy-stm32/src/rcc/l0/mod.rs
+++ b/embassy-stm32/src/rcc/l0/mod.rs
@@ -1,4 +1,5 @@
 pub use super::types::*;
+use crate::dbgmcu::Dbgmcu;
 use crate::pac;
 use crate::peripherals::{self, CRS, RCC, SYSCFG};
 use crate::rcc::{get_freqs, set_freqs, Clocks};
@@ -172,11 +173,7 @@ impl<'d> Rcc<'d> {
         unsafe {
             pac::RCC.ahbenr().modify(|w| w.set_dma1en(enable_dma));
 
-            pac::DBGMCU.cr().modify(|w| {
-                w.set_dbg_sleep(true);
-                w.set_dbg_standby(true);
-                w.set_dbg_stop(true);
-            });
+            Dbgmcu::enable_all();
         }
     }
 
diff --git a/examples/stm32l0/src/bin/blinky.rs b/examples/stm32l0/src/bin/blinky.rs
index 833c14fbf..7ccebae55 100644
--- a/examples/stm32l0/src/bin/blinky.rs
+++ b/examples/stm32l0/src/bin/blinky.rs
@@ -8,21 +8,20 @@
 
 #[path = "../example_common.rs"]
 mod example_common;
-use embassy_stm32::{
-    gpio::{Level, Output, Speed},
-    rcc::*,
-};
+
+use defmt::panic;
+use embassy::executor::Spawner;
+use embassy::time::{Duration, Timer};
+use embassy_stm32::gpio::{Level, Output, Speed};
+use embassy_stm32::rcc::Rcc;
+use embassy_stm32::Peripherals;
 use embedded_hal::digital::v2::OutputPin;
 use example_common::*;
 
-use cortex_m_rt::entry;
-
-#[entry]
-fn main() -> ! {
+#[embassy::main]
+async fn main(_spawner: Spawner, mut p: Peripherals) {
     info!("Hello World!");
 
-    let mut p = embassy_stm32::init(Default::default());
-
     Rcc::new(p.RCC).enable_debug_wfe(&mut p.DBGMCU, true);
 
     let mut led = Output::new(p.PB5, Level::High, Speed::Low);
@@ -30,10 +29,10 @@ fn main() -> ! {
     loop {
         info!("high");
         led.set_high().unwrap();
-        cortex_m::asm::delay(1_000_000);
+        Timer::after(Duration::from_millis(300)).await;
 
         info!("low");
         led.set_low().unwrap();
-        cortex_m::asm::delay(1_000_000);
+        Timer::after(Duration::from_millis(300)).await;
     }
 }
diff --git a/examples/stm32l0/src/bin/button_exti.rs b/examples/stm32l0/src/bin/button_exti.rs
index a7f734942..6ea0d9cc9 100644
--- a/examples/stm32l0/src/bin/button_exti.rs
+++ b/examples/stm32l0/src/bin/button_exti.rs
@@ -8,20 +8,17 @@
 
 #[path = "../example_common.rs"]
 mod example_common;
-use embassy::executor::Executor;
-use embassy::time::Clock;
-use embassy::util::Forever;
+
+use defmt::panic;
+use embassy::executor::Spawner;
 use embassy_stm32::exti::ExtiInput;
 use embassy_stm32::gpio::{Input, Pull};
-use embassy_stm32::rcc;
+use embassy_stm32::{rcc, Peripherals};
 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());
+#[embassy::main]
+async fn main(_spawner: Spawner, mut p: Peripherals) {
     let mut rcc = rcc::Rcc::new(p.RCC);
     rcc.enable_debug_wfe(&mut p.DBGMCU, true);
     // Enables SYSCFG
@@ -39,26 +36,3 @@ async fn main_task() {
         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()));
-    })
-}