LED blink works with CFG_DEBUGGER enabled but not when disabled on STM32WB5MM-DK
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-29 5:58 AM
I’m developing a custom BLE server on an STM32WB5MM-DK using STM32CubeWB HAL, the Sequencer (UTIL_SEQ), and the HW TimeServer (HW_TS) for periodic tasks. I implemented a repeated LED blink.
With CFG_DEBUGGER_SUPPORTED set to 1, the LED toggles on/off every ~5 s as expected.
With CFG_DEBUGGER_SUPPORTED set to 0, the LED never blinks, though BLE advertising and characteristic updates continue.
I’ve tuned low-power settings and task scheduling, but the OFF callback (and thus the blink sequence) never runs when CFG_DEBUGGER_SUPPORTED is off. I suspect there is something wrong between Stop mode and the Sequencer/timers, but can’t pinpoint the issue.
/* In Custom_APP_Init(): register tasks & create timers */
UTIL_SEQ_RegTask(1 << CFG_TASK_LEDON, UTIL_SEQ_RFU, LEDONTask);
UTIL_SEQ_RegTask(1 << CFG_TASK_LEDOFF, UTIL_SEQ_RFU, LEDOFFTask);
HW_TS_Create(CFG_TIM_LEDON_ISR, &Custom_App_Context.LEDON_TIMER_ID,
hw_ts_Repeated, LEDON_TIMER_ISR);
HW_TS_Create(CFG_TIM_LEDOFF_ISR, &Custom_App_Context.LEDOFF_TIMER_ID,
hw_ts_SingleShot, LEDOFF_TIMER_ISR);
/* Kick off the blink loop on init */
HW_TS_Start(Custom_App_Context.LEDON_TIMER_ID, LEDONTIMER_INTERVAL);
/* Timer ISRs: queue the corresponding tasks */
void LEDON_TIMER_ISR(void)
{
UTIL_SEQ_SetTask(1 << CFG_TASK_LEDON, CFG_SCH_PRIO_1);
}
void LEDOFF_TIMER_ISR(void)
{
HW_TS_Stop(Custom_App_Context.LEDOFF_TIMER_ID);
UTIL_SEQ_SetTask(1 << CFG_TASK_LEDOFF, CFG_SCH_PRIO_1);
}
/* LED on: disable Stop mode, set LED, schedule off */
void LEDONTask(void)
{
UTIL_LPM_SetStopMode(CFG_LPM_APP_BLE, UTIL_LPM_DISABLE);
APP_DBG_MSG("LEDONTask");
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HW_TS_Start(Custom_App_Context.LEDOFF_TIMER_ID, LEDOFFTIMER_INTERVAL);
}
/* LED off: clear LED, re-enable Stop mode */
void LEDOFFTask(void)
{
APP_DBG_MSG("LEDOFFTask");
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
UTIL_LPM_SetStopMode(CFG_LPM_APP_BLE, UTIL_LPM_ENABLE);
}
- Labels:
-
BLE
-
STM32WB series
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-29 6:50 AM
Hello,
could you please share the project?
Thank you.
Best regards,
ST support
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-29 7:19 AM
Make sure you're explicitly enabling the GPIOA clock when you enable / setup the pin.
Perhaps dump the register settings to a console / output, independently of the debugger.
Up vote any posts that you find helpful, it shows what's working..
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-29 12:28 PM
@FilipKremen wrote:Hello,
could you please share the project?
Thank you.
Best regards,
ST support
Hi Filip,
Here is the zip file:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-30 12:56 AM
Hello,
did you change anything else? I tried your project, and I can see pin toggling with or without CFG_DEBUGGER_SUPPORTED.
Best regards,
ST support
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-30 3:07 AM
Hi Filip,
did you enable LPM. I think it has something to do with low power mode.
When I enable low power mode. The LED doesn’t toggle.
thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-30 5:26 AM
Hello,
I noticed you enabled standby mode during initialization. It should be disabled in MX_APPE_Init() function.
Please note that if you want to enter standby mode, the radio must be turned off. Please have a look at this topic here as it can be helpful for your implementation.
Solved: Re: Problem with entering standby mode in STM32WB5... - STMicroelectronics Community
void MX_APPE_Init(void)
{
System_Init(); /**< System initialization */
SystemPower_Config(); /**< Configure the system Power Mode */
HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
/* USER CODE BEGIN APPE_Init_1 */
APPD_Init();
UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_DISABLE);
/* USER CODE END APPE_Init_1 */
appe_Tl_Init(); /* Initialize all transport layers */
/**
* From now, the application is waiting for the ready event (VS_HCI_C2_Ready)
* received on the system channel before starting the Stack
* This system event is received with APPE_SysUserEvtRx()
*/
/* USER CODE BEGIN APPE_Init_2 */
/* USER CODE END APPE_Init_2 */
return;
}
Best regards,
ST support
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-30 6:20 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
2025-05-30 7:12 AM
Hello,
please try to comment this line __HAL_RCC_GPIOA_CLK_DISABLE() in APPD_Init(). This function disables the clock for GPIOA. Let me know if it works on your side, thank you.
Best regards,
ST support
