文章目录
一.概要
在生活中通过关掉电器组件可以实现省电节能的目的,同样的道理单片机也可以通过这种方法实现降低功耗。单片机是由许多部件组成,一些组件的电源系统是独立的,可以通过关闭单片机内部的组件的电压,可以实现降低功耗。
二.STM32单片机低功耗基本介绍
STM32提供了一些低功耗模式。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不需要继续运行(例如等待外部事件) 时,可以利用多种低功耗模式来节省功耗。
STM32F407单片机提供了多种功耗模式,以达到不同层次的降低功耗的目的:
• 睡眠模式 (内核停止工作,外设仍在运行)
• 停止模式 (所有时钟都停止)
• 待机模式 ( 1.2 V 内核电源关闭)
WFI和WFE都是系统指令,WFI是表示中断,WFE表示事件。
睡眠模式:
仅关闭了内核时钟,内核停止运行,但其片上外设,CM4 核心的外设全都照常运行,在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
睡眠模式退出:
如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从睡眠模式唤醒。
如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。
停止模式:
进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码 。
停止模式退出:
当一个中断或唤醒事件会退出停止模式。
待机模式:
它除了关闭所有的时钟,还把 1.2V 区域的电源也完全关闭了,也就是说, 从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测BOOT条件,从头开始执行程序 。
待机模式退出:
WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位可以退出待机模式。
三.STM32F407单片机待机模式介绍
待机模式下可达到最低功耗。待机模式基于 Cortex™-M4F 深度睡眠模式,其中调压器被禁 止。因此 1.2 V 域断电。PLL、HSI 振荡器和 HSE 振荡器也将关闭。除备份域(RTC 寄存器、RTC 备份寄存器和备份 SRAM)和待机电路中的寄存器外,SRAM 和寄存器内容都将丢失。
如何进入和退出待机模式,细节参考如下表:
在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:
● 复位引脚(始终有效)
● 当被设置为防侵入或校准输出时的TAMPER引脚
● 被使能的唤醒引脚
● RTC和IWDG(如果开启)继续运行。
四.CubeMX配置一个待机低功耗例程
STLINK接STM32F407VET6开发板,STLINK接电脑USB口。用万用表的电流档,串联到开发板的5V插针供电中。
打开STM32CubeMX软件,新建工程
Part Number处输入STM32F407VE,再双击就创建新的工程
配置下载口引脚
配置外部晶振引脚
可以查看STM32F407VET6开发板原理图,PB4连接LED灯,所以配置PB4为GPIO输出
配置系统主频168Mhz,使用外部晶振
配置工程文件名,保存路径,KEIL5工程输出方式
生成工程
用Keil5打开工程
添加代码
void StandbyMode_Measure(void)
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
/* Allow access to Backup */
HAL_PWR_EnableBkUpAccess();
/* Reset RTC Domain */
__HAL_RCC_BACKUPRESET_FORCE();
__HAL_RCC_BACKUPRESET_RELEASE();
/* Disable all used wakeup sources: Pin1(PA.0) */
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
/* Clear all related wakeup flags */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
/* Re-enable all used wakeup sources: Pin1(PA.0) */
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//使能唤醒引脚
/* Request to enter STANDBY mode */
HAL_PWR_EnterSTANDBYMode();//进入待机模式
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();//初始化1毫秒 Tick
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();//外部8M晶振,系统168M主频
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
for(int i=0;i<50;i++)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);//PB4引脚翻转输出
HAL_Delay(200);//等待100ms
}
__HAL_RCC_PWR_CLK_ENABLE();
/* Check and handle if the system was resumed from StandBy mode */
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)//清除标志
{
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
}
StandbyMode_Measure();//进入待机模式
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
实验效果
STM32单片机进入低功耗前,板子功耗是47mA左右
10秒之后,STM32单片机进入待机状态,板子功耗是5.94mA左右,功耗降的比较明显,说明进入待机状态,然后按下唤醒按键(WKUP),板子又进入重新运行状态。
五.CubeMX工程源代码下载
通过网盘分享的文件:10.低功耗实验.zip
链接: https://pan.baidu.com/s/1Q6Y1dsE5nuWTxt5I3zQYIQ 提取码: 61w8
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行
六.小结
STM32单片机支持多种低功耗模式,包括睡眠模式、待机模式等,这些模式通过降低时钟频率、禁用外设和进入深度睡眠状态来实现节能。通过仔细选择和配置这些模式,可以显著减少功耗,从而延长设备的续航时间。
标签:CODE,HAL,引脚,低功耗,模式,单片机,源码,待机,PWR From: https://blog.csdn.net/zy2232652/article/details/142384333