当前位置: 首页 > 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.xdnf.cn/news/462313.html

相关文章:

  • 策略模式-枚举实现
  • 如何判断一个网站后端是用什么语言写的
  • 7.Pyecharts:全局配置项1
  • Python 翻译词典小程序
  • 平替BioLegend品牌-Elabscience FITC Anti-Mouse CD8a抗体(53-6.7)精准标记T细胞表面抗原
  • 断点续传使用场景,完整前后端实现示例,包括上传,下载,验证
  • 麒麟系统ARM64架构部署mysql、jdk和java项目
  • 牛客网刷题:NC208813求逆序数
  • 【PX4飞控】在 Matlab Simulink 中使用 Mavlink 协议与 PX4 飞行器进行交互
  • python处理异常,JSON
  • 数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)
  • NSSCTF [GFCTF 2021]where_is_shell
  • 【MySQL】多表连接查询
  • postgresql主从+repmgr+keepalive安装
  • Google DeepMind 推出AlphaEvolve
  • Trivy:让你时刻掌控的开源安全扫描器
  • 产线视觉检测设备技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的国产化替代赛扬N100/N150全场景技术解析
  • SQL:MySQL函数:条件函数(Conditional Functions)
  • OpenCV人脸识别EigenFace算法、案例解析
  • [学习]RTKLib详解:tle.c(系列终章)
  • 一般的析因设计
  • 探索Turn.js:打造惊艳的3D翻页效果
  • 2025年,如何制作并部署一个完整的个人博客网站
  • 让三个线程(t1、t2、t3)按顺序依次打印 A、B、C
  • 网站漏洞存在哪些危害,该如何做好预防?
  • Java中的深拷贝与浅拷贝
  • Blender 入门教程(三):骨骼绑定
  • 三目云台20倍变焦智能监控技术
  • 基于Arduino的迷你掌上游戏机
  • TCP(传输控制协议)建立连接的过程