当前位置: 首页 > news >正文

低功耗实现方法思路总结

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口。

http://www.dtcms.com/a/192766.html

相关文章:

  • 什么是Agentic AI(代理型人工智能)?
  • ESP32简介及相关使用
  • ubuntu服务器版启动卡在start job is running for wait for...to be Configured
  • 浪潮云边协同:赋能云计算变革的强力引擎
  • 鸿道Intewell操作系统:人形机器人底层操作系统
  • SQLPub:一个提供AI助手的免费MySQL数据库服务
  • 十、HQL:排序、联合与 CTE 高级查询
  • Linux515 rsync定时备份
  • 多链互操作性标准解析:构建下一代区块链互联生态
  • 4.6/Q1,GBD数据库最新文章解读
  • Seata源码—3.全局事务注解扫描器的初始化二
  • C语言经典笔试题目分析(持续更新)
  • 单物理机上部署多个TaskManager与调优 Flink 集群
  • Cinema4D 26.014
  • 【语义分割专栏】先导篇:评价指标(PA,CPA,IoU,mIoU,FWIoU,F1)
  • Cursor无法使用C/C++调试的解决办法
  • DeepSeek推理优化技巧:提升速度与降低成本
  • Go 中闭包的常见使用场景
  • 鸿蒙OSUniApp开发的商品详情展示页面(鸿蒙系统适配版)#三方框架 #Uniapp
  • 硬盘坏了电脑会出现哪些明显现象?机械和固态可不一样
  • windows、Ubuntu、Debian 添加静态路由
  • AI大模型从0到1记录学习numpy pandas day24
  • LeetCode 2900.最长相邻不相等子序列 I:阅读理解题——O(n)一次遍历(贪心)
  • LeetCode 3337.字符串转换后的长度 II:矩阵快速幂(也没有想象中的那么高级啦)
  • V837s-LAN8720A网口phy芯片调试
  • 协作赋能-1-制造业生产流程重构
  • journal of Electronic Imaging(JEI)投稿咨询
  • Linux服务之lvs+keepalived nginx+keepalived负载均衡实例解析
  • 如何安全配置好CDN用于防止DDoS与Web攻击 ?
  • 图形语言中间层:重构 AI 编程的未来之路