有过低功耗产品设计经验的朋友都应该了解,一个产品的功耗,不仅仅是硬件的功耗问题,软件的设计也是影响整体功耗的重要因素。我在过去开发了几款使用电池供电的产品,调试过程颇为艰辛,需要同时考虑软件和硬件的各种因素。
比如,当你认为软件已经没有问题时,硬件部分可能还存在漏电流的问题。这种状况下的“痛苦”,我想每一位开发人员都有过深刻的体验。
接下来,我会分享一些关于STM32低功耗设计时,其引脚的相关配置,希望对大家有所帮助。
首先,我们要优化GPIO软件。对于不使用的GPIO输入,我们应该将其配置为模拟输入。因为GPIO始终有一个输入通道,可以是数字或模拟通道,如果不需要读取GPIO数据,那么模拟输入是优先选择。这样做可以节省输入施密特触发器的消耗。在STM32CubeMX配置中,我们可以找到这样的选项,将不使用的引脚配置为模拟状态。
其次,我们可以调整GPIO的速度。上升时间、下降时间和最大频率都可以通过GPIOx_OSPEEDR寄存器进行配置。这种调整会影响EMI(电磁干扰)和SSO(同时开关输出),因为开关电流峰值较高。因此,我们需要在GPIO性能和噪声之间找到平衡。
再者,如果某个GPIO组长时间不需要使用,我们可以使用HAL_RCC_GPIOx_CLK_DISABLE()函数禁用其时钟,从而降低功耗。
当产品进入低功耗模式时,我们需要对GPIO进行特定的配置。所有引脚信号必须连接到VDD或接地。如果GPIO连接到外部接收器,我们需要使用PP或PU/PD强制GPIO信号值。如果连接到驱动器,驱动器必须提供有效电平( VDD或接地)。如果未定义驱动器电平,我们需要使用PU/PD强制GPIO上的信号。
退出关机模式时, GPIO会在上电复位时重新配置为默认值。在将它们重新编程为正确值之前,这会需要额外的系统消耗。如果这是应用程序的问题,我们可以使用待机模式替代关机模式。
以上就是我对于STM32低功耗设计的一些理解和建议,希望对大家有所帮助。记住,无论是硬件还是软件,我们都在追求更高效的能耗控制,以实现更长久的产品使用时间。
今天回答一位读者问的关于STM32低功耗问题。
1写在前面
有低功耗产品设计经验的朋友都应该知道,一个产品的功耗不光是硬件功耗的事,其实软件也是影响整个产品功耗的一个关键因素。
我之前也开发过几款使用电池供电的产品,调试起来,那叫一个痛苦,软件和硬件各种因素都要考虑。
当你确信软件没问题了,可能硬件某个地方又存在漏电流,这其中的“痛苦”我也不再这里描述了。
下面给出STM32低功耗时,其引脚的相关配置。
2
实现功耗优化的GPIO软件指南
1.将未使用的GPIO输入配置为模拟输入
GPIO始终有一个输入通道,可以是数字或模拟通道。
如果不需要读取GPIO数据,则优先配置为模拟输入。这节省了输入施密特触发器的消耗。
在STM32CubeMX配置中都有这么一个选项:将不用引脚配置为模拟状态。
2.调节GPIO速度
上升时间,下降时间和最大频率可使用GPIOx_OSPEEDR配置寄存器进行配置。
这种调整对EMI(电磁干扰)和SSO(同时开关输出)有影响,因为开关电流峰值较高。因此必须平衡GPIO性能与噪声。
每个GPIO信号的上升时间和下降时间必须适应与相关信号频率和电路板容性负载兼容的最小值。
3.不使用时禁用GPIO寄存器时钟
如果某个GPIO组不需要长时间使用,请使用HAL_RCC_GPIOx_CLK_DISABLE()函数禁用其时钟。
4.进入低功耗模式时配置GPIO
进入低功耗模式时,所有引脚信号必须连接到VDD或接地。
如果GPIO连接到外部接收器(外部元件输入),则必须使用PP或PU/PD强制GPIO信号值。
当GPIO连接到驱动器(外部元件输出或总线)时,驱动器必须提供有效电平( VDD或接地)。如果未定义驱动器电平,则必须使用PU/PD强制GPIO上的信号。
出于实际原因,当GPIO是运行模式下的输入(模拟或数字)时,在低功耗模式下使用输入PU/PD可能更容易;当GPIO是运行模式下的输出时,则使用输出PP。这可以避免在进入或退出停止模式时管理更改。
5.退出关机模式
退出关机模式时, GPIO会在上电复位时重新配置为默认值。
在将它们重新编程为正确值之前,这会需要额外的系统消耗。
如果这是应用程序的问题,则必须使用待机模式替代关机模式。
(仅限STM32L4系列和STM32L4+系列)
(以上内容来自应用笔记:AN4899)