低功耗实现方法思路总结

发布于:2025-05-16 ⋅ 阅读:(14) ⋅ 点赞:(0)

1.硬件选型最重要,比如stm 8l ,MSP430,瑞萨rl78,lpc11等

2.开发仿真务必使用高精度万用表如fluke

3.在整体规划层面,避免引脚未配置的浮空状态

a)在设计开发层面,对于使用的信号,使用上下拉电阻或者推挽输出,使其固定在一个固定的高低电平。

b)引脚尽可能能配的都配,避免未定义;测试仿真时候多点万用表示波器确认一下

4.外部的上下拉电阻阻值不能过小,否则会产生较大静态电流。即将所有未使用的I/O口配置为输入模式(高阻态)。

5.尽量使用MCU内部的上下拉

6.对于不经常使用的外设,wifi ,sensor, gps等,用mos管设计其开关电路

7.软件上,让MCU尽可能长时间进入停机模式,有任务才再唤醒处理任务:

a)对于不需要的外设,关闭掉或者配置到低功耗状态

b)对于要使用的,尽量使用最低的系统时钟频率

c)尽量用外部中断来实现MCU的唤醒

测试仿真层面:

a)出现超功耗,先用表分模块测试,对照器件数据手册排查是否正常

b)软件上,检查进入低功耗模式前的IO口的模式和状态(主要是未使用的I/O口配置为高阻态、禁用内部上拉/下拉电阻、关闭I/O口的中断和事件)。

 1.将所有未使用的I/O口配置为输入模式(高阻态)。这样可以避免这些引脚意外驱动负载或产生漏电流。

GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_x; // x为具体的引脚编号
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 配置为输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 禁用内部上拉或下拉电阻
HAL_GPIO_Init(GPIOx, &GPIO_InitStruct); // x为具体的GPIO端口

2.如果I/O口配置为输入模式,确保内部上拉或下拉电阻被禁用。这些电阻在低功耗模式下会增加静态功耗。

GPIO_InitStruct.Pull = GPIO_NOPULL; // 禁用内部上拉或下拉电阻
HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);

3.如果有低功耗模式的话,某些单片机支持将I/O口配置为低功耗模式,例如关闭I/O口的时钟或进入睡眠模式。

__HAL_RCC_GPIOx_FORCE_RESET(GPIOx); // 关闭GPIOx的时钟

4.如果I/O口配置为输出模式,确保它们的输出状态是安全的,避免在低功耗模式下驱动负载。

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 配置为推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 选择低速模式以降低功耗
HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);

HAL_GPIO_WritePin(GPIOx, GPIO_PIN_x, GPIO_PIN_RESET); // 将引脚拉低

5.禁用IO口的中断和事件。即,如果I/O口配置为中断或事件模式,确保在进入低功耗模式前禁用这些中断和事件,以避免不必要的唤醒。

HAL_NVIC_DisableIRQ(GPIOx_IRQn); // 禁用GPIO中断

6.检测IO的电源域管理。即,如果单片机支持电源域管理,确保I/O口所在的电源域在低功耗模式下被正确管理,例如关闭不必要的电源域。

7.检查IO口的特殊功能如总线。即,如果I/O口配置为特殊功能(如I2C、SPI、UART等),确保这些功能在低功耗模式下被正确关闭或配置为低功耗模式。

__HAL_UART_DISABLE(&huartx); // 关闭UART

8.检测IO口的漏电流。即,硬件上,确保I/O口的漏电流在可接受范围内。如果漏电流过大,可能需要通过外部电路(如MOSFET)来隔离I/O口。在最初时候,就尽量使用低漏电流的MOSFET或继电器来隔离I/O口。


网站公告

今日签到

点亮在社区的每一天
去签到