ST意法半导体
直播中

万物死

8年用户 1314经验值
擅长:MEMS/传感技术
私信 关注
[问答]

STM32WB生成代码中的LPM调用问题求解

我在 CubeMX 为 STM32WB 上的 BLE 应用程序生成的代码中发现了一些奇怪的东西。在 APP_BLE_Init 中我们有这个:
  • /**
  • * Do not allow standby in the application
  • */
  • UTIL_LPM_SetOffMode(1 << CFG_LPM_APP_BLE, UTIL_LPM_DISABLE);
我的理解是,这可以防止 CPU1 在 CPU2 启动时进入待机状态。然后,在 APPE_SysUserEvtRx 中,我们有这个:
  • UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE);
同样,我的理解是,这是对来自 CPU2 的消息的响应,表明它已完成引导,因此可以再次启用待机模式。
然而,我刚刚注意到这两个调用使用不同的 ID(第一个为 CFG_LPM_APP_BLE 禁用待机模式,第二个为 CFG_LPM_APP 启用它)。结果是当 CPU2 完成引导时,待机模式永远不会重新启用。
这是生成的代码中对 UTIL_LPM_SetOffMode 的仅有的两次调用,因此 ID 的更改似乎不太可能是故意的——为什么我们会看到一个禁用和一个启用,但 ID 不同?
这是故意的,还是生成代码中的错误?如果是故意的,有人可以更详细地向我解释每个 ID 缺少的启用/禁用应该去哪里吗?

回帖(1)

王永佳

2023-2-7 09:47:19
BLE 处于活动状态时不支持待机/关机模式。
正确的做法是,一旦您决定由于射频长时间不活动而进入待机/关机模式,您需要停止所有射频活动(例如,您应该停止您可能已经开始的所有广告、扫描活动并断开所有链接)
完成此操作后,您只需对 CPU1 进行编程以进入待机/关机模式(CPU2 不会阻止此操作,因为它无事可做)。
那样的话,wakeup的方式就和我们所有的STM32一样了。(唤醒引脚、RTC 等...)。
退出待机/关机时,您应以与电源打开时相同的方式重新启动 CPU2。CPU2 上没有保留任何上下文。从 CPU2 的角度来看,待机/关机的处理方式与开机相同。
举报

更多回帖

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