diff --git a/examples/stm32l4/src/bin/adc.rs b/examples/stm32l4/src/bin/adc.rs
index f2a8bfb7f..457def6c2 100644
--- a/examples/stm32l4/src/bin/adc.rs
+++ b/examples/stm32l4/src/bin/adc.rs
@@ -9,29 +9,27 @@
 #[path = "../example_common.rs"]
 mod example_common;
 
-use defmt::panic;
-use embassy::executor::Spawner;
 use embassy::time::Delay;
 use embassy_stm32::adc::{Adc, Resolution};
-use embassy_stm32::{pac, Peripherals};
+use embassy_stm32::dbgmcu::Dbgmcu;
+use embassy_stm32::pac;
 use example_common::*;
 
-#[embassy::main]
-async fn main(_spawner: Spawner, p: Peripherals) {
+#[cortex_m_rt::entry]
+fn main() -> ! {
     info!("Hello World!");
 
     unsafe {
+        Dbgmcu::enable_all();
+
         pac::RCC.ccipr().modify(|w| {
             w.set_adcsel(0b11);
         });
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
         pac::RCC.ahb2enr().modify(|w| w.set_adcen(true));
     }
 
+    let p = embassy_stm32::init(Default::default());
+
     let mut adc = Adc::new(p.ADC1, &mut Delay);
     //adc.enable_vref();
     adc.set_resolution(Resolution::EightBit);
diff --git a/examples/stm32l4/src/bin/blinky.rs b/examples/stm32l4/src/bin/blinky.rs
index 1064bcd55..c98033831 100644
--- a/examples/stm32l4/src/bin/blinky.rs
+++ b/examples/stm32l4/src/bin/blinky.rs
@@ -11,8 +11,9 @@ mod example_common;
 use defmt::panic;
 use embassy::executor::Spawner;
 use embassy::time::{Duration, Timer};
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::gpio::{Level, Output, Speed};
-use embassy_stm32::{pac, Peripherals};
+use embassy_stm32::Peripherals;
 use embedded_hal::digital::v2::OutputPin;
 use example_common::*;
 
@@ -21,11 +22,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
     let mut led = Output::new(p.PB14, Level::High, Speed::Low);
diff --git a/examples/stm32l4/src/bin/button.rs b/examples/stm32l4/src/bin/button.rs
index 08c20ce4b..5bebfae7f 100644
--- a/examples/stm32l4/src/bin/button.rs
+++ b/examples/stm32l4/src/bin/button.rs
@@ -8,25 +8,21 @@
 
 #[path = "../example_common.rs"]
 mod example_common;
-use defmt::panic;
-use embassy::executor::Spawner;
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::gpio::{Input, Pull};
-use embassy_stm32::{pac, Peripherals};
 use embedded_hal::digital::v2::InputPin;
 use example_common::*;
 
-#[embassy::main]
-async fn main(_spawner: Spawner, p: Peripherals) {
+#[cortex_m_rt::entry]
+fn main() -> ! {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
+    let p = embassy_stm32::init(Default::default());
+
     let button = Input::new(p.PC13, Pull::Up);
 
     loop {
diff --git a/examples/stm32l4/src/bin/button_exti.rs b/examples/stm32l4/src/bin/button_exti.rs
index 5ab7dd9ab..42efa0d6c 100644
--- a/examples/stm32l4/src/bin/button_exti.rs
+++ b/examples/stm32l4/src/bin/button_exti.rs
@@ -10,9 +10,10 @@
 mod example_common;
 use defmt::panic;
 use embassy::executor::Spawner;
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::exti::ExtiInput;
 use embassy_stm32::gpio::{Input, Pull};
-use embassy_stm32::{pac, Peripherals};
+use embassy_stm32::Peripherals;
 use embassy_traits::gpio::{WaitForFallingEdge, WaitForRisingEdge};
 use example_common::*;
 
@@ -21,11 +22,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
     let button = Input::new(p.PC13, Pull::Up);
diff --git a/examples/stm32l4/src/bin/dac.rs b/examples/stm32l4/src/bin/dac.rs
index 46f59ec12..8e2431ec7 100644
--- a/examples/stm32l4/src/bin/dac.rs
+++ b/examples/stm32l4/src/bin/dac.rs
@@ -9,28 +9,26 @@
 #[path = "../example_common.rs"]
 mod example_common;
 
-use defmt::panic;
-use embassy::executor::Spawner;
 use embassy_stm32::dac::{Channel, Dac, Value};
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::gpio::NoPin;
-use embassy_stm32::{pac, Peripherals};
+use embassy_stm32::pac;
 use example_common::*;
 
-#[embassy::main]
-async fn main(_spawner: Spawner, p: Peripherals) {
+#[cortex_m_rt::entry]
+fn main() -> ! {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
+
         pac::RCC.apb1enr1().modify(|w| {
             w.set_dac1en(true);
         });
     }
 
+    let p = embassy_stm32::init(Default::default());
+
     let mut dac = Dac::new(p.DAC1, p.PA4, NoPin);
 
     loop {
diff --git a/examples/stm32l4/src/bin/spi.rs b/examples/stm32l4/src/bin/spi.rs
index 14bfae512..e082b74e5 100644
--- a/examples/stm32l4/src/bin/spi.rs
+++ b/examples/stm32l4/src/bin/spi.rs
@@ -9,29 +9,25 @@
 #[path = "../example_common.rs"]
 mod example_common;
 
-use defmt::panic;
-use embassy::executor::Spawner;
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::dma::NoDma;
 use embassy_stm32::gpio::{Level, Output, Speed};
 use embassy_stm32::spi::{Config, Spi};
 use embassy_stm32::time::Hertz;
-use embassy_stm32::{pac, Peripherals};
 use embedded_hal::blocking::spi::Transfer;
 use embedded_hal::digital::v2::OutputPin;
 use example_common::*;
 
-#[embassy::main]
-async fn main(_spawner: Spawner, p: Peripherals) {
+#[cortex_m_rt::entry]
+fn main() -> ! {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
+    let p = embassy_stm32::init(Default::default());
+
     let mut spi = Spi::new(
         p.SPI3,
         p.PC10,
diff --git a/examples/stm32l4/src/bin/spi_dma.rs b/examples/stm32l4/src/bin/spi_dma.rs
index 9672e2459..e32ff17f9 100644
--- a/examples/stm32l4/src/bin/spi_dma.rs
+++ b/examples/stm32l4/src/bin/spi_dma.rs
@@ -11,10 +11,11 @@ mod example_common;
 
 use defmt::panic;
 use embassy::executor::Spawner;
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
 use embassy_stm32::spi::{Config, Spi};
 use embassy_stm32::time::Hertz;
-use embassy_stm32::{pac, Peripherals};
+use embassy_stm32::Peripherals;
 use embassy_traits::spi::FullDuplex;
 use embedded_hal::digital::v2::{InputPin, OutputPin};
 use example_common::*;
@@ -24,11 +25,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
     let mut spi = Spi::new(
diff --git a/examples/stm32l4/src/bin/usart.rs b/examples/stm32l4/src/bin/usart.rs
index b93b5ab52..06abd41a2 100644
--- a/examples/stm32l4/src/bin/usart.rs
+++ b/examples/stm32l4/src/bin/usart.rs
@@ -8,26 +8,23 @@
 
 #[path = "../example_common.rs"]
 mod example_common;
-use cortex_m::prelude::_embedded_hal_blocking_serial_Write;
-use defmt::panic;
-use embassy::executor::Spawner;
+
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::dma::NoDma;
 use embassy_stm32::usart::{Config, Uart};
-use embassy_stm32::{pac, Peripherals};
+use embedded_hal::blocking::serial::Write;
 use example_common::*;
 
-#[embassy::main]
-async fn main(_spawner: Spawner, p: Peripherals) {
+#[cortex_m_rt::entry]
+fn main() -> ! {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
+    let p = embassy_stm32::init(Default::default());
+
     let config = Config::default();
     let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, NoDma, NoDma, config);
 
diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs
index cb01a2b5b..a90732ae0 100644
--- a/examples/stm32l4/src/bin/usart_dma.rs
+++ b/examples/stm32l4/src/bin/usart_dma.rs
@@ -11,9 +11,10 @@ mod example_common;
 use core::fmt::Write;
 use defmt::panic;
 use embassy::executor::Spawner;
+use embassy_stm32::dbgmcu::Dbgmcu;
 use embassy_stm32::dma::NoDma;
 use embassy_stm32::usart::{Config, Uart};
-use embassy_stm32::{pac, Peripherals};
+use embassy_stm32::Peripherals;
 use embassy_traits::uart::Write as _;
 use example_common::*;
 use heapless::String;
@@ -23,11 +24,7 @@ async fn main(_spawner: Spawner, p: Peripherals) {
     info!("Hello World!");
 
     unsafe {
-        pac::DBGMCU.cr().modify(|w| {
-            w.set_dbg_sleep(true);
-            w.set_dbg_standby(true);
-            w.set_dbg_stop(true);
-        });
+        Dbgmcu::enable_all();
     }
 
     let config = Config::default();