ST意法半导体
直播中

莫联雪

8年用户 1200经验值
私信 关注
[问答]

STM32WB BLE广播在退出待机模式后停止是为什么?怎么解决?

我目前正在使用来自 STM32Cube_FW_WB_V1.0.0 的 BLE_p2pServer 的(官方)示例应用程序。我试图让它在待机模式下工作,并且我禁用了这个特定测试的广告超时。
BLE 在待机模式下(醒来之前)仍在广播。但是醒来后就停止了。
编辑:BLE 实际上在进入待机模式后立即停止广告。
  • if(   (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
  •       && (__HAL_PWR_GET_FLAG(PWR_FLAG_C2SB) != RESET)
  •      )
  •    {
  •      /* Clear Standby flag */
  •      __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
  •      __HAL_PWR_CLEAR_FLAG(PWR_FLAG_C2SB);
  •    }
  •   else {
  •     MX_RTC_Init();
  •     APPE_Init();
  •   }
从代码来看,我没有在退出待机模式后重新初始化 RTC 和 BLE,因为我认为微控制器在退出待机模式后从 RESET 启动。
当调用 SCH_Idle() 函数时,微控制器将进入待机模式。
  • void SCH_Idle( void )
  • {
  • #if ( CFG_LPM_SUPPORTED == 1)
  •     LL_C2_PWR_SetPowerMode(LL_PWR_MODE_STANDBY);
  •     HAL_PWREx_EnableSRAMRetention();
  •     HAL_PWR_EnterSTANDBYMode();
  •     Error_Handler();
  • #endif
  •   return;
  • }
你觉得我哪里做错了?感谢您的回复和帮助。
P/s:目前,我只是使用 NRST 引脚从待机状态唤醒。这是因为当我使用 RTC 唤醒时,我遇到了一些奇怪的事件,微控制器在第一次退出待机模式后没有再次进入待机模式,并进入了 Error_Handler() 中的 while 循环。我还没有更深入地了解这个事件。当我认为我知道错误来自哪里时会发布一个问题。






回帖(1)

李俊一

2022-12-28 10:01:21
CM0+ 无线系统不支持在待机模式下运行。
只要您需要 BLE RF 活动,可以使用的最低低功耗模式就是停止模式 2。
当您不再有 BLE RF 活动时,您可以决定进入待机模式。
当退出待机模式时,您应该在发送任何命令(BLE 或系统命令)之前重新初始化 CM0+ 无线系统。
因此,当 RF 活动仍在运行时,不支持动态待机模式。
仅当 CM0+ 无线系统不再有活动时才支持待机模式,并且应作为 CM0+ 无线系统的完全重置进行管理,这意味着退出待机模式时,您应运行 CM0+ 无线系统的完全初始化在发送任何命令之前。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分