【发布时间】:2022-11-13 16:06:52
【问题描述】:
我正在尝试使用关机模式使 STM32WL(目前在 WL55JC1 开发板上)进入睡眠状态,并且遇到了 MCU 在进入后立即退出睡眠的问题。
这是我用来睡觉的东西:
Radio.Sleep();
HAL_SUBGHZ_MspDeInit(&hsubghz);
LL_RCC_RF_EnableReset();
__disable_irq();
HAL_SuspendTick();
HAL_PWREx_DisableSRAMRetention();
HAL_PWREx_EnableFlashPowerDown(PWR_FLASHPD_LPSLEEP);
HAL_PWR_DisablePVD();
HAL_SUBGHZ_ExecSetCmd(&hsubghz, RADIO_SET_SLEEP, 0x0000, 2);
HAL_Delay(3000);
HAL_PWREx_EnterSHUTDOWNMode();
进入休眠时,我尝试挂起systick,然后使用HAL宏进入shutdown休眠模式。从我读过的内容来看,这似乎就是我所需要的,但显然不是在这种情况下。
无论我的开发板上的板载 ST-Link 模块是否通电,都会从睡眠中退出。
NRST 目前处于浮动状态,因为当我将其拉至地时,芯片会关闭并拉出 700uA。另一个难题要弄清楚。
编辑:不确定是否有帮助,但这是我的系统时钟配置:
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure LSE Drive Capability
*/
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
/** Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK
|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
}
【问题讨论】:
-
什么应该触发你的唤醒?在您的主代码中,您只需在进入关机模式后恢复滴答声……恢复滴答声会产生一个中断,因此它可能是唤醒系统的那个。
-
我正在通过 NRST 引脚触发唤醒。我已经更新了代码 sn-ps 以反映我目前正在尝试的内容。在这一点上,我降低到大约 3mA 的功耗(所以模块处于某种睡眠状态,只是没有关闭),但不能再低了。
-
显然不太可能,但是在你睡觉之前有一些挂起的中断呢?
标签: c stm32 sleep stm32cubeide