我目前正在使用来自
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 循环。我还没有更深入地了解这个事件。当我认为我知道错误来自哪里时会发布一个问题。