一、SLEEP睡眠模式
1、概念
在SLEEP模式下,CPU停止执行指令,但内部和外部的SRAM、寄存器和大部分外设(除了被显式禁用的)仍然保持活跃。系统时钟继续运行,因此定时器和中断可以触发唤醒事件。这种模式适用于需要快速响应中断的情况,因为它提供了较快的唤醒时间。然而,由于许多组件仍然运行,功耗比其他两种模式高。
2、代码编写
主调节器,外设中断唤醒
//主调节器(Main Regulator)和低功耗调节器(Low Power Regulator)
while (1)
{
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin);
printf("while \r\n");
HAL_SuspendTick();
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
//HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFE);
HAL_ResumeTick();
HAL_Delay(500);
}
串口中断唤醒
//串口唤醒
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart==&huart1)
{
if (reciveDate[0] == 'R' && reciveDate[1] == 'U' && reciveDate[2] == 'E')
{
printf("rouse !!! \r\n");
}
HAL_UART_Receive_DMA(&huart1, reciveDate, 3);//再次启动中断接收
}
}
二、STOP停止模式
STOP模式提供了更低的功耗,此时CPU完全停止,所有的时钟都被关闭,包括系统时钟。SRAM和寄存器的内容被保留,但外设可能被停用,除非它们被配置为在STOP模式下仍然运行(例如RTC)。唤醒源通常是硬件中断(如RTC闹钟、外部中断、USB唤醒等)。由于时钟需要重新配置,唤醒时间较长,但功耗远低于SLEEP模式。
三、STANDBY待机模式
STANDBY模式是功耗最低的模式,它会将整个微控制器置于非常低的功耗状态。在这种模式下,CPU和所有的时钟以及大多数外设都被关闭,包括系统时钟和内核时钟。只有少数外设(如RTC和USB唤醒)以及电源管理模块保持运行。唤醒通常通过外部唤醒信号(如引脚上的上升或下降沿、RTC闹钟或USB唤醒)完成。由于需要重启微控制器并重新配置时钟系统,STANDBY模式的唤醒时间最长,但也是最节能的模式。
1、使用System Wake-UP 结束待机模式
代码
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); //使能引脚
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); //清除标志位
HAL_PWR_EnterSTANDBYMode();//进入待机模式
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB))
{
printf("Reset from standby mode \r\n");
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
}
else
{
printf("MCU RESET !!! \r\n");
}
while (1)
{
printf("while \r\n");
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
HAL_PWR_EnterSTANDBYMode();
}