Skip to main content
SCous.1
Associate II
September 17, 2026
Question

STM32WB09KE - zephyr - GPIO wake from deepstop not working

  • September 17, 2026
  • 1 reply
  • 25 views

I have a board that we want to use to wake up on button presses and send BLE messages to other devices. In the start i can see that an IRQ is triggered when we push the button. But once we go to deepstop/sleep, the trigger does not do anything anymore.
I use zephyr version 4.4.2

My buttons is connected to PB14 and PB15,

dts contains:

    gpio_keys {
        compatible = "gpio-keys";
        wakeup-source;

        button1: button_0 {
            label = "Button 1";
            gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>;
            zephyr,code = <INPUT_KEY_0>;
        };
        button2: button_1 {
            label = "Button 2";
            gpios = <&gpiob 15 GPIO_ACTIVE_HIGH>;
            zephyr,code = <INPUT_KEY_1>;
        };
    };

/* Board is populated with an HSE 32 MHz crystal (OSC_IN/OSC_OUT) and an
 * LSE 32.768 kHz crystal (PB12/PB13) - use both instead of the internal
 * HSI/LSI RC oscillators for accurate timing.
 */
&clk_hse {
    status = "okay";
};

&clk_lse {
    status = "okay";
};

&pll {
    status = "okay";
};

&rcc {
    clocks = <&pll>;
    clock-frequency = <DT_FREQ_M(64)>;
    clksys-prescaler = <1>;
    slow-clock = <&clk_lse>;
};

&rtc {
    /**
     * STM32_SRC_LSE reflects the "slow-clock" selected on RCC node.
     * NO_SEL reflects STM32WB0's lack of RTC clock mux to configure.
     */
    clocks = <&rcc STM32_CLOCK(APB0, 12)>,
         <&rcc STM32_SRC_LSE NO_SEL>;
    status = "okay";
};

Defconfig contains

CONFIG_PM=y
CONFIG_PM_DEVICE=y

When I check the power consumption (see img below) i see after boot sequence the consumption drops to 66µA, It stays there untill i press on of the buttons. 
I press one button and see a short bump in the consumption → expected wake up but is to short and nothing happens
I release the button and also see small short bump → expected second wake up as i configured IRQ as:
gpio_pin_interrupt_configure_dt(&btn->spec, GPIO_INT_EDGE_BOTH); But still nothing happens.
Then exactly 1 second after button pressed i see a massive consumption that stays but still no logging or reaction. 

 

Is there any example for the STM32WB09 series that i could try with zephyr to check if a button edge can get the MCU out of deepstop? 
Or any pointers on how to configure or what to look out for?

Thanks

1 reply

SCous.1
SCous.1Author
Associate II
September 18, 2026

the unknown consumption after the button press exactly 1 second after the button is pressed is not there when the logging is disabled by setting 

CONFIG_LOG=n

so is the MCU not waking or is it?
I’ve set an unrelated pin on the MCU each time i press a button, active when pressed, not active when released. And that pin should trigger an additional consumption when active. so i would see that in the power measurements but i do not see any of that.
What could cause the MCU to do something when CONFIG_LOG=y after 1 second and not when CONFIG_LOG=n?
I’m still not been able to wrap my head around this.

Buttons keep working when setting CONFIG_PM=n but consumption stays high, because no low power mode is activated.

This means irq’s are triggered when in active mode.

I was on a self developed board but now have replicated it on the nucleo-wb09ke board and have the same result. only more difficult to measure the power, but output line is LED and is visible when PM is off.

An example project (even for the nucleo board) would still be appreciated.

Thanks