diff --git a/examples/sleep_stop.rs b/examples/sleep_stop.rs
index b3b5e3fe402c0f22e548177476f2eea5abd8f9a9..3e5c5cbbc9768080a2db59df989bf340eb536019 100644
--- a/examples/sleep_stop.rs
+++ b/examples/sleep_stop.rs
@@ -18,6 +18,34 @@ use rt::ExceptionFrame;
 
 use cortex_m::peripheral::Peripherals;
 
+fn analog_input() {
+    #[allow(non_snake_case)]
+    let GPIOC = unsafe { &*stm32f40x::GPIOC::ptr() };
+    #[allow(non_snake_case)]
+    let GPIOD = unsafe { &*stm32f40x::GPIOD::ptr() };
+    #[allow(non_snake_case)]
+    let GPIOE = unsafe { &*stm32f40x::GPIOE::ptr() };
+    // #[allow(non_snake_case)]
+    // let GPIOF = unsafe { &*stm32f40x::GPIOF::ptr() };
+    // #[allow(non_snake_case)]
+    // let GPIOG = unsafe { &*stm32f40x::GPIOG::ptr() };
+    // #[allow(non_snake_case)]
+    // let GPIOH = unsafe { &*stm32f40x::GPIOH::ptr() };
+    // #[allow(non_snake_case)]
+    // let GPIOI = unsafe { &*stm32f40x::GPIOI::ptr() };
+    let r1 = GPIOC.moder.read().bits();
+    GPIOC.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+    GPIOD.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+    GPIOE.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+                                                           // GPIOF.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+                                                           // GPIOG.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+                                                           // GPIOH.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+                                                           // GPIOI.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // analog mode
+
+    let r2 = GPIOC.moder.read().bits();
+    // asm::bkpt();
+}
+
 // set the MCU in debug sleepdeep mode on WFI/WFE
 // debugging is possible even if sleeping
 fn dbg_enable() {
@@ -36,14 +64,16 @@ fn dbg_enable() {
             .trace_ioen()
             .set_bit()
     });
-    // GPIOB.moder.reset();
-    // GPIOA.moder.reset();
-    // GPIOB.pupdr.reset();
-    // GPIOA.pupdr.reset();
+    GPIOA.moder.reset();
+    GPIOA.pupdr.reset();
+
+    GPIOB.moder.reset();
+    GPIOB.pupdr.reset();
 }
 
 // set the MCU in true sleepdeep mode on WFI/WFE
 // debugging is disabled (until re-enabled)
+
 fn dbg_disable() {
     #[allow(non_snake_case)]
     let DBG = unsafe { &*stm32f40x::DBG::ptr() };
@@ -67,10 +97,17 @@ fn dbg_disable() {
     // let _b_moder_ = GPIOB.moder.read().bits();
     // let _a_pupdr_ = GPIOA.pupdr.read().bits();
     // let _b_pupdr_ = GPIOB.pupdr.read().bits();
-    // GPIOB.moder.write(|w| unsafe { w.bits(0) });
-    // GPIOA.moder.write(|w| unsafe { w.bits(0) });
-    // GPIOB.pupdr.write(|w| unsafe { w.bits(0) });
-    // GPIOA.pupdr.write(|w| unsafe { w.bits(0) });
+
+    // 0.142 mA without manipulating GPIO/GPIOB
+
+    GPIOA.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // PA, analog
+    GPIOA.moder.modify(|_, w| w.moder1().input_mode()); // PA1, input_mode
+    GPIOB.pupdr.write(|w| unsafe { w.bits(0) }); // PA, floating
+    GPIOA.pupdr.modify(|_, w| w.pupdr1().pull_up()); // PA1, pull up
+
+    GPIOB.moder.write(|w| unsafe { w.bits(0xFFFF_FFFF) }); // PB, analog
+    GPIOB.pupdr.write(|w| unsafe { w.bits(0) }); // PB, floating
+
     // let _a_moder = GPIOA.moder.read().bits();
     // let _b_moder = GPIOB.moder.read().bits();
     // let _a_pupdr = GPIOA.pupdr.read().bits();
@@ -87,28 +124,43 @@ fn main() -> ! {
 
     // enable the EXTI1 interrupt
     p.NVIC.enable(Interrupt::EXTI1);
-    // enable gpioa (input mode on reset)
-    r.RCC
-        .ahb1enr
-        .modify(|_, w| w.gpioaen().set_bit().gpioben().set_bit());
+    // enable gpioa, gpiob
+    r.RCC.ahb1enr.modify(|_, w| {
+        w.gpioaen()
+            .set_bit()
+            .gpioben()
+            .set_bit()
+            .gpiocen()
+            .set_bit()
+            .gpioden()
+            .set_bit()
+            .gpioeen()
+            .set_bit()
+            .gpiofen()
+            .set_bit()
+    });
+    // asm::bkpt();
+    analog_input();
+    // asm::bkpt();
 
     let mut read: u32 = 0;
-    r.GPIOA.pupdr.modify(|r, w| {
-        read = r.bits();
-        w.pupdr1().pull_up()
-    });
+
+    // PA1 pull up
+    r.GPIOA.pupdr.modify(|r, w| w.pupdr1().pull_up());
     #[allow(non_snake_case)]
     let GPIOA = unsafe { &*stm32f40x::GPIOA::ptr() };
 
     asm::nop();
 
-    // SYSCFG.exti1 is PAx (0000) by reset
+    // SYSCFG.exti1 is PAx (0000) by reset, so we don't change it
+
     // enbable masking of EXTI line 1
     r.EXTI.imr.modify(|_, w| w.mr1().set_bit());
     // trigger on falling edge
     r.EXTI.ftsr.modify(|_, w| w.tr1().set_bit());
+    // clear triggering event
+    r.EXTI.pr.modify(|_, w| w.pr1().set_bit());
 
-    asm::bkpt();
     p.SCB.set_sleepdeep();
     // enable pwr
     r.RCC.apb1enr.modify(|_, w| w.pwren().set_bit());
@@ -123,10 +175,11 @@ fn main() -> ! {
     // r.PWR
     //     .cr
     //     .modify(|_, w| w.pdds().clear_bit().lpds().clear_bit());
-    blink();
+    // blink();
 
     // p.NVIC.set_pending(Interrupt::EXTI1);
 
+    asm::bkpt();
     loop {
         asm::nop(); // put gdb breakpoint here, the MCU and gdb will detect breakpoint
         dbg_disable();