如何在低功耗模式下最大限度地降低功耗:以NUCLEO-F401RE板为例
 

1.简介

在设计基于MCU的应用程序时,优化功耗是最大的挑战之一。
在本文中,我们选择了STM32F401 MCU,它可以在四种不同的模式下配置:运行模式、睡眠模式、停止模式和待机模式。在我们的测试中,NUCLEO-F401RE配置为停止模式。
本文的目的是在描述实现功耗优化的步骤的同时,分享功耗优化的技巧。
 

2.先决条件

2.1硬件

Mini-B USB电缆用于从主机为Nucleo板供电,并将代码加载到STM32中。
核-F401RE。

2.2.软件

STM32管。


3.步骤

1.打开STM32CubeIDE。
2.使用NUCLEO-F401RE板创建一个新项目。
使用板选择器选择NUCLEO-F401RE野猪:


3.输入项目名称,例如“LowPowerConsumption”。


4.用默认模式初始化所有外围设备?
回答“否”以将功耗降至最低,如下所示:


5.如下图所示或使用“Ctrl+p”清除引脚。


6.将所有空闲引脚设置为模拟引脚(以优化功耗)。
在“项目管理器”选项卡中,选择代码生成器,然后单击“将所有空闲引脚设置为模拟引脚”(以优化功耗)。

请注意,此功能允许在主.c文件中的Mx_GPIO_Init函数中添加以下代码行:
静态void MX_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStruct={0};/*GPIO端口时钟启用*/__HAL_RCC_GPIOC_CLK_ENABLE()__HAL_RCC_GPIOH_CLK_ENABLE()__HAL_RCC_GPIOA_CLK_ENABLE()__HAL_RCC_GPIOB_CLK_ENABLE()__HAL_RCC_GPIOD_CLK_ENABLE();/*配置GPIO引脚:PC13 PC14 PC15 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 PC12*/GPIO_InitStruct.Pin=GPIO_Pin_13|GPIO_Pin_24|GPIO_Pin_15|GPIO_Pin_0|GPIO_PI_1|GPIO_IN_2|GPIO_Pin _3|GPIO_ Pin_4| GPIO_Pin_5|GPIO_粉红色_6|GPIO_粉色_7|GPIO_Pin _8|GPIO_粉红_9|GPIO_IN _10|GPIO_平_11|GPIO_Ping _12;GPIO_InitStruct.Mode=GPIO_Mode_ANALOG;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);/*配置GPIO引脚:PH0 PH1*/GPIO_InitStruct.Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStruct.Mode=GPIO_Mode_ANALOG;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOH,&GPIO_InitStruct);/*配置GPIO引脚:PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PA8 PA9 PA10 PA11 PA12 PA13 PA14 PA15*/GPIO_InitStruct.Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_IN_4|GPIO_PI_5|GPIO_Pin _6|GPIO_Pin _7|GPIO_ Pin_8|GPIO_粉红色_9|GPIO_平_10|GPIO_粉红_11|GPIO_IN _12|GPIO_粉色_13|GPIO_拼音_14|GPIO_Ping _15;GPIO_InitStruct.Mode=GPIO_Mode_ANALOG;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);/*配置GPIO引脚:PB0 PB1 PB2 PB10 PB12 PB13 PB14 PB15 PB3 PB4 PB5 PB6 PB7 PB8 PB9*/GPIO_InitStruct.Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_10|GPIO_IN_12|GPIO_PI_13|GPIO_Pin _14|GPIO_ Pin_15|GPIO_粉红色_3|GPIO_Pin _4|GPIO_IN _5|GPIO_粉色_6|GPIO_粉红_7|GPIO_拼音_8|GPIO_Ping _9;GPIO_InitStruct.Mode=GPIO_Mode_ANALOG;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);/*配置GPIO引脚:PD2*/GPIO_InitStruct.Pin=GPIO_Pin_2;GPIO_InitStruct.Mode=GPIO_Mode_ANALOG;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOD,&GPIO_InitStruct);}

7.生成代码。
通过单击“Ctrl+s”保存项目并生成代码。

8.在/*用户代码开始2*/和/*用户编码结束2*/之间插入以下行以进入停止模式:
/*FLASH深度断电模式已启用*/HAL_PWREx_EnableFlashPowerDown();/*进入停止模式*/HAL_PWR_EnterSTOP模式(PWR_LOWPOWERREGULATIOR_ON,PWR_STOPENTRY_WFI);
9.构建项目并运行代码,如下图所示。

10.要测量消耗电流,只需拆下跨接导线6并放置万用表即可。
11.在这种情况下,功耗将等于17µA。该值与数据表中共享的值类似。
注意事项:
  1. 当我们不使用将所有空闲引脚设置为模拟引脚的功能(以优化功耗)时,将添加补充功耗,在我们的情况下为133µa。
  2. NUCLEO-F401RE和停止模式就是一个例子。这种功耗优化方法可以应用于不同模式下工作的不同板。


4.链接
https://www.st.com/resource/en/user_manual/um1724-stm32-nucleo64-boards-mb1136-stmicroelectronics.pd...
https://www.st.com/resource/en/datasheet/stm32f401re.pdf
https://www.st.com/resource/en/reference_manual/rm0368-stm32f401xbc-and-stm32f401xde-advanced-armbas...
https://www.st.com/en/development-tools/stm32cubeide.html