2025-07-01 4:03 AM - edited 2025-07-01 5:33 AM
Hi everyone,
I’m working with the NUCLEO - WB15CC board and I’m trying to enter STOP1 mode to minimize current consumption. However, despite disabling all unnecessary peripherals, the power consumption remains unexpectedly high (much higher than in the PWR_STOP1 example provided by STM32Cube, which works fine on the same board).
Called HAL_SuspendTick() before entering STOP mode and HAL_ResumeTick() after wakeup
Called hci_reset() to reset the BLE stack
Configured all GPIOs as analog with no pull (using GPIO_AllAnalog())
Disabled clocks for all unused peripherals:
Despite all of this, I’m still seeing much higher current than expected. Strangely, if I flash the official PWR_STOP1 example from STM32Cube, it works perfectly and the consumption is very low (100 uA).
Also if I set LL_PWR_MODE_STANDBY the consuption is low indeed, but it is ok for me stop mode that should be around 100-200 uA. However using an amperometer I reach 3mA...
What could be preventing STOP1 mode from reducing the current properly in my application, even though all peripherals and interrupts seem to be handled correctly? Are there hidden wake-up sources or configuration steps I might be missing?
Any insights would be highly appreciated!
2025-07-01 4:23 AM
Welcome to the forum.
Please see How to write your question to maximize your chances to find a solution for best results; in particular:
2025-07-01 5:30 AM
Yes sorry, I updated the post
2025-07-01 6:28 AM
When measuring consumption, you need to
2025-07-01 6:39 AM - edited 2025-07-01 6:43 AM
I have disconnected the ST-Link, which I noticed contributes only for about 500uA, so does not justify the high consuption. What do you mean for power cycle?
2025-07-01 6:46 AM
@Marco99 wrote:What do you mean for power cycle?
Turn the power off, and then back on again.
2025-07-01 6:52 AM
I've already tried that...Moreover in the example that I tried it works fine from the first download of the code.
I think it may be related to the not completely switch off of the BLE, but I did this and doesnt work either.
aci_gap_set_non_discoverable();
HAL_Delay(100);
hci_reset();
HAL_Delay(100);
HAL_SuspendTick();
LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1); // Or LL_PWR_MODE_STOP1 or LL_PWR_MODE_STOP0
SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
// Enter Stop mode
__WFI();
HAL_ResumeTick();
Doing the same thing in a project without ble works fine...
2025-07-01 6:55 AM
@Marco99 wrote:in the example that I tried it works fine from the first download of the code..
So step through that example using the debugger, and note the current after each step;
Then do the same with your code - and see where it differs.
(Of course, using the debugger will affect the figures - but the effect should be the same in both cases)
2025-07-01 7:07 AM
Sorry but I don't get how can help me with my issue... The code where I enter in stop mode is the same and also the preparation, the only difference is that I have enabled BLE in my code
2025-07-01 7:12 AM
So look into that, then.