news 2026/5/25 12:57:18

【嵌入式面试2】-低功耗设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【嵌入式面试2】-低功耗设计

嵌入式面试2-低功耗设计

  • 一.基础概念与分类
    • 1. STM32 常见的低功耗模式有哪些?简要说明各自的节能特点和适用场景。
    • 2.当你需要设计一个低功耗产品时,如何根据需求选择合适的低功耗模式?
    • 3.睡眠模式下如何进入?如何唤醒?唤醒延时是多少?
    • 4.停止模式的特点是什么?进入退出时有什么注意事项?
    • 5.待机模式的特点是什么?为什么说退出待机模式相当于系统复位?
    • 6. STM32L4 系列相比 F 系列在低功耗方面有哪些增强?
  • 二.唤醒机制与唤醒源
    • 1.停止模式下有哪些唤醒源可用?待机模式下有哪些?
    • 2.使用RTC闹钟从STOP模式唤醒时,时钟源应该选择LSE还是LSI?为什么?
    • 3.3 如何正确配置GPIO以最小化低功耗模式下的漏电流?
  • 三.Tickless模式与RTOS低功耗
    • 1 FreeRTOS 的 Tickless 低功耗模式是如何工作的?
    • 2.Tickless 模式配置步骤是什么?需要注意什么?
    • 3 在 FreeRTOS 中使用 STOP 模式遇到 SysTick 时钟停止问题如何解决?
  • 四.低功耗设计技巧与陷阱
    • 1.除选择低功耗模式外,还有哪些降低STM32系统功耗的设计技巧?
    • 2. 在低功耗应用中,中断服务函数应如何处理?
    • 3.设计中常被忽略的"功耗陷阱"有哪些?

一.基础概念与分类

1. STM32 常见的低功耗模式有哪些?简要说明各自的节能特点和适用场景。

STM32(F系列为例)提供了睡眠(Sleep),停止(Stop),待机(Standby)三种标准低功耗模式,功耗从高到低。

模式核心状态数据保留唤醒源唤醒时间适用场景
睡眠模式CPU停止,外设仍工作全部保留任意中断几微秒极短时间等待,如按键检测轮询间隙
停止模式主时钟关闭,部分外设保留SRAM和寄存器保留EXTI,RTC,LPUART,LPTIM几十微秒到毫秒周期性采用,环境检测仪等需要保留数据的场景
待机模式整个芯片几乎断电仅备份寄存器保留,SRAM内容丢失WKUP引脚,RTC闹钟毫秒级(复位启动)极长时间休眠,如智能门锁、远程报警器

2.当你需要设计一个低功耗产品时,如何根据需求选择合适的低功耗模式?

应综合考虑三个方面:功耗要求唤醒速度要求是否需要在低功耗期间保留数

IoT传感器节点的典型策略是:传感器采用间歇工作模式,定时唤醒采集数据,采集完成后再次进入休眠,数据上报时使用NB-IoT模块在空闲时进入PSM或eDRX模式进一步降低通信功耗。

3.睡眠模式下如何进入?如何唤醒?唤醒延时是多少?

进入睡眠模式可以通过**WFI(Wait For Interrupt)WFE(Wait For Event)**两条指令, Cortex-M内核提供标准的__WFI()__WFE()函数可直接调用。

  • 使用WFI进入:任意中断都会将MCU从睡眠模式中唤醒
  • 使用WFE进入:需要配置EXIT线作为事件,有事件发生时退出睡眠

睡眠模式下Cortex-M内核停止运行,但所有外设(如NVIC、SRAM、GPIO、UART、定时器)和时钟仍正常工作,因此唤醒延时极小,仅需几个微秒即可恢复运行。

4.停止模式的特点是什么?进入退出时有什么注意事项?

停止模式基于Cortex-M内核的深度休眠模式与外设时钟门控,在此模式下,MCU所有1.2V域内的时钟都会停止,PLL、HSI和HSE RC振荡器被禁止,但内部SRAM和寄存器的数据被完整保留。调压器可配置为正常模式或低功耗模式,还可以通过PWR_CR寄存器的FPDS位使Flash在停止模式下进入掉电状态,进一步降低功耗,但退出时会增加启动延时。

关键注意事项:退出停止模式后,系统时钟通常恢复为HSI(8MHz),如果原使用PLL倍频至更高频率(如72MHz),必须手动重新初始化时钟树,否则外设可能无法正常工作。

5.待机模式的特点是什么?为什么说退出待机模式相当于系统复位?

待机模式是所有低功耗模式中功耗最低的。在此模式下,内部电压调节器被禁止,1.2V域断电,PLL、HSI振荡器和HSE振荡器全部关闭。除了备份区域和待机电路相关的寄存器外,SRAM和其他寄存器的内容都将丢失,备份寄存器(RTC_BKPxR)中的数据可以保留。退出待机模式时,系统会触发复位,程序从main()函数的最开始重新执行,唤醒延时长(毫秒级)。

如果需要保留关键状态信息,必须在进入待机模式前将数据写入备份寄存器或Flash。

6. STM32L4 系列相比 F 系列在低功耗方面有哪些增强?

STM32L系列是ST专门推出的超低功耗产品线,L4系列提供了多达7种低功耗工作模式,在低功耗、短启动时间、可用外围设备和可用唤醒源之间实现最佳折衷。核心增强包括:

  • 低功耗运行模式(LPRun):使用低功耗稳压器为内核供电,CPU频率限制为2 MHz,显著降低动态功耗
  • 低功耗睡眠模式(LPSleep):仅LPRun模式可进入,CPU时钟停止,系统恢复后回到LPRun模式
  • Stop 0/1/2三级细分:在保留SRAM和寄存器内容的前提下,提供不同深度的停止模式选项
  • 自主外设:LPUART、LPTIM等外设可在低功耗下独立工作,无需频繁唤醒CPU

二.唤醒机制与唤醒源

1.停止模式下有哪些唤醒源可用?待机模式下有哪些?

停止模式的唤醒源较丰富:EXTI外部中断(包括16条外部线)、PVD输出电压检测器、RTC闹钟/唤醒事件、LPUART、LPTIM、USB唤醒等。待机模式的唤醒源则十分有限:仅支持WKUP引脚上升沿、RTC闹钟(闹钟A/B)、RTC入侵事件、RTC时间戳事件、RTC唤醒事件和NRST复位。

2.使用RTC闹钟从STOP模式唤醒时,时钟源应该选择LSE还是LSI?为什么?

工程上优先选择LSE(32.768 kHz外部晶振),原因是LSE是外部晶振,精度远高于内部LSI RC振荡器。LSI受温度和电压影响温漂较大,长期定时会产生累积误差,导致唤醒间隔不准。只有在成本或封装尺寸极端受限的情况下,才可接受LSI方案,并在软件中做定期校准。

3.3 如何正确配置GPIO以最小化低功耗模式下的漏电流?

GPIO的配置对低功耗下的漏电流影响极大,不同配置的功耗从低到高排序为:

  1. 模拟输入模式:功耗最低,完全断开内部数字电路,避免上下拉电阻耗电
  2. 推挽输出并固定到合适电平:输出低电平时略高于模拟输入
  3. 上拉/下拉输入模式:电阻会持续消耗微小电流
  4. 浮空输入模式:功耗最高,引脚浮动会导致内部MOS管部分导通,产生额外漏电

黄金实践:将所有不使用的GPIO配置为模拟输入模式,在HAL库中通过GPIO_MODE_ANALOG完成初始化。对于连接到外部电路的输出引脚,在空闲时应设置为输出低电平(若外设低电平功耗低)或高电平,避免不必要的电流消耗;同时尽量减少GPIO的翻转频率,因为每次翻转都会产生动态功耗。

三.Tickless模式与RTOS低功耗

1 FreeRTOS 的 Tickless 低功耗模式是如何工作的?

FreeRTOS提供的Tickless Idle模式让MCU在空闲时进入低功耗模式,并长时间保持。其核心思想是:传统的RTOS系统时钟(如SysTick)每隔固定时间产生中断,即使系统完全空闲也会频繁唤醒MCU,无法真正深度睡眠。Tickless模式解决了这个问题。

工作原理:

  1. 当所有任务都阻塞等待时,Idle任务被执行,此时准备进入低功耗模式
  2. RTOS调度器可以计算出下一个周期性任务的预期触发时间
  3. 动态调整系统定时器中断触发时间,避免在不必要的时间点产生中断
  4. MCU进入低功耗后,系统时钟不再产生周期性中断(即"Tickless"状态)
  5. 当MCU被中断/事件唤醒后,通过一个仍在低功耗模式下运行的定时器(如LPTIM)计算出在低功耗期间停留的时间,对系统tick进行软件补偿

2.Tickless 模式配置步骤是什么?需要注意什么?

配置步骤分为两步:

  1. FreeRTOSConfig.h中设置configUSE_TICKLESS_IDLE
  • 0:不使用低功耗
  • 1:使用FreeRTOS默认实现
  • 2:用户自定义实现低功耗逻辑
  1. 如果配置为2,需要重写两个关键函数:vPortSetupTimerInterrupt(设置休眠时间补偿相关变量)和 vPortSuppressTicksAndSleep(实现低功耗进入和退出逻辑,包括停止SysTick、进入低功耗、休眠补偿、重启SysTick)

关键注意事项:

  • 进入STOP模式前,必须暂停SysTick定时器,防止唤醒后SysTick未及时恢复导致系统tick计数出错
  • 唤醒后需重新配置系统时钟,并补偿系统tick值
  • 当低功耗时间极短(如几个tick)时,进入低功耗模式的意义不大,应在软件中添加判断策略
  • 在图形应用中,进入LPSLEEP前需要检查当前状态:用户未操作屏幕、TouchGFX已完成渲染、DSI刷新过程已完成后才允许进入,避免花屏问题

3 在 FreeRTOS 中使用 STOP 模式遇到 SysTick 时钟停止问题如何解决?

STOP模式下,几乎所有的时钟(包括SysTick的时钟源)都会被关闭,但RTC和LPTIM等低功耗定时器可继续运行。解决方法是在进入STOP模式前,暂停SysTick定时器;在MCU被唤醒后,通过一个仍在低功耗模式下运行的定时器(如LPTIM或RTC)计算出低功耗模式下停留的时间,对系统tick值进行补偿,使RTOS调度器的时间基准不丢失。

四.低功耗设计技巧与陷阱

1.除选择低功耗模式外,还有哪些降低STM32系统功耗的设计技巧?

优化维度具体技巧
时钟管理降低系统主频,使用HSI或MSI代替HSE;禁用未使用的外设时钟(通过RCC_AHB/APB使能寄存器)
外设控制进入低功耗前关闭所有非必要外设(未使用的ADC、SPI、I2C等)及其时钟
GPIO优化未使用引脚配置为模拟输入;输出引脚匹配外部电路状态,避免灌/拉电流
唤醒源优化使用RTC或LPTIM替代普通定时器作为周期性唤醒源,降低定时器自身功耗
软件架构采用事件驱动替代轮询,减少CPU空转;任务尽可能长时间阻塞或休眠

2. 在低功耗应用中,中断服务函数应如何处理?

低功耗应用中,中断服务函数必须遵循"快进快出"原则:

  • ISR中只做最小必要操作:清除中断标志、设置全局唤醒标志,立即返回
  • 耗时操作放到主循环:数据处理、通信、外设初始化等放在主循环中,通过检查唤醒标志触发
  • 避免优先级冲突:正确处理中断嵌套,防止唤醒后立即被高优先级中断打断
  • 正确恢复系统状态:从停止模式唤醒后,务必重新配置系统时钟,否则后续外设可能无法正常工作

3.设计中常被忽略的"功耗陷阱"有哪些?

进入低功耗前,关闭所有非必要外设及其时钟,将所有GPIO配置为模拟输入或明确的上拉/下拉输入,对必须保留的外设(如唤醒用的EXTI或RTC)单独保留其时钟并精确配置触发条件

  • 未关闭的时钟支路:即使外设本身被禁用,若其时钟仍在运行,时钟树的分支会持续消耗能量
  • 浮空输入引脚:悬空的输入引脚因电平浮动导致内部上拉/下拉电阻持续耗电,甚至因输入缓冲器不完全关断产生额外漏电
  • 未正确配置的备份域:在停止/待机模式下,若RTC或LSE/LSI未正确配置,备份域电路可能异常耗电
  • 调试器残留影响:量产板上的调试接口未作处理,可能在用户现场仍产生额外功耗
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 12:57:18

Taotoken的Token Plan套餐如何帮助个人开发者节省成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的Token Plan套餐如何帮助个人开发者节省成本 1. 个人开发者的模型调用成本挑战 对于独立进行项目开发的个人开发者而言&…

作者头像 李华
网站建设 2026/5/25 12:57:15

springboot出现的原因(一)--处理spring和maven的关系

为什么会出现这个springboot,他出现的背景是为了解决什么问题 1.整合依赖管理的机制 了解springboot之前,我认为是要先去了解mave springboot是解决maven相关的问题在代码工程的实践 不管是前端还是后端 在代码走向工程化以后。 都是先引入依赖&#xff…

作者头像 李华
网站建设 2026/5/25 12:56:28

5分钟搞定Android Studio中文界面:终极免费汉化完整指南

5分钟搞定Android Studio中文界面:终极免费汉化完整指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Androi…

作者头像 李华
网站建设 2026/5/25 12:51:00

3分钟掌握罗技鼠标宏:PUBG完美压枪的终极指南

3分钟掌握罗技鼠标宏:PUBG完美压枪的终极指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中的枪械后坐力而烦…

作者头像 李华
网站建设 2026/5/25 12:49:00

基于元学习的AutoML动态搜索空间构建:原理、实现与效率优化

1. 项目概述与核心思路在自动化机器学习(AutoML)的实际应用中,一个核心的挑战是如何在浩瀚的算法和超参数组合构成的搜索空间中,高效地找到高性能的解决方案。传统的暴力搜索(如网格搜索)或随机搜索&#x…

作者头像 李华
网站建设 2026/5/25 12:46:06

BetterJoy:让Switch手柄在PC端实现跨平台适配的终极解决方案

BetterJoy:让Switch手柄在PC端实现跨平台适配的终极解决方案 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcod…

作者头像 李华