第50讲:低功耗固件Spec——休眠条件、唤醒源、功耗约束
CSDN专栏嵌入式程序开发实战嵌入式双范式AI编程嵌入式开发必掌握嵌入式求职面试技术资料第50讲低功耗固件Spec——休眠条件、唤醒源、功耗约束一、低功耗固件Spec的重要性低功耗是电池供电设备的关键指标必须通过Spec严格约束休眠和唤醒机制。1.1 为什么需要低功耗Spec原因一电池寿命要求电池寿命计算电池容量1000mAh平均功耗1mA电池寿命1000小时≈42天功耗降低10倍电池寿命延长10倍原因二功耗优化复杂功耗优化涉及硬件选择低功耗器件休眠模式多种休眠模式选择唤醒机制唤醒源配置软件优化减少CPU运行时间必须系统化设计才能达到低功耗目标原因三功耗与功能平衡功耗与功能矛盾休眠深功耗低但唤醒慢、功能受限休眠浅功耗高但唤醒快、功能完整必须根据应用场景选择合适的休眠模式1.2 低功耗Spec的组成低功耗Spec休眠模式定义休眠模式类型休眠条件休眠进入流程唤醒源定义唤醒源类型唤醒条件唤醒流程功耗约束各模式功耗平均功耗峰值功耗低功耗策略外设管理时钟管理唤醒后处理二、休眠模式定义Spec2.1 休眠模式定义Spec模板## 休眠模式定义Spec ### 2.1 休眠模式类型 - DES-001[休眠模式名称] - 模式类型[睡眠/停止/待机] - 功耗[功耗值] - 唤醒时间[唤醒时间] - 可用功能[可用功能列表] ### 2.2 休眠条件 - DES-002休眠条件 - 条件1[条件] - 条件2[条件] - 条件3[条件] ### 2.3 休眠进入流程 - DES-003休眠流程 - 步骤1[步骤] - 步骤2[步骤] - 步骤3[步骤]2.2 休眠模式定义Spec示例STM32示例一STM32休眠模式## 休眠模式定义SpecSTM32F103 ### 2.1 休眠模式类型 #### 2.1.1 睡眠模式Sleep - DES-001睡眠模式 - 模式类型睡眠模式Sleep Mode - 功耗约2mA3.3V72MHz - 唤醒时间1us - 可用功能 - CPU停止运行 - 所有外设继续运行 - SRAM和寄存器内容保持 - 唤醒源任何中断 #### 2.1.2 停止模式Stop - DES-002停止模式 - 模式类型停止模式Stop Mode - 功耗约20uA3.3V - 唤醒时间约10us - 可用功能 - CPU停止运行 - 所有时钟停止 - SRAM和寄存器内容保持 - RTC、外部中断可用 - 唤醒源外部中断、RTC闹钟、USB唤醒 #### 2.1.3 待机模式Standby - DES-003待机模式 - 模式类型待机模式Standby Mode - 功耗约2uA3.3V - 唤醒时间约50ms - 可用功能 - CPU停止运行 - 所有时钟停止 - SRAM和寄存器内容丢失除备份域 - 仅RTC、外部复位、WKUP引脚可用 - 唤醒源WKUP引脚、RTC闹钟、外部复位、看门狗复位 ### 2.2 休眠条件 #### 2.2.1 睡眠模式条件 - DES-004睡眠模式条件 - 条件1无任务需要执行 - 条件2等待中断唤醒 - 条件3需要快速唤醒1us #### 2.2.2 停止模式条件 - DES-005停止模式条件 - 条件1长时间无任务100ms - 条件2允许唤醒延迟~10us - 条件3需要保持SRAM内容 #### 2.2.3 待机模式条件 - DES-006待机模式条件 - 条件1极长时间无任务1s - 条件2允许唤醒延迟~50ms - 条件3允许SRAM内容丢失 ### 2.3 休眠进入流程 #### 2.3.1 睡眠模式流程 - DES-007睡眠模式流程 c void Enter_Sleep_Mode(void) { // 清除SLEEPDEEP位 SCB-SCR ~SCB_SCR_SLEEPDEEP_Msk; // 进入睡眠模式 __WFI(); // 或 __WFE() }2.3.2 停止模式流程DES-008停止模式流程voidEnter_Stop_Mode(void){// 关闭不必要的外设RCC-APB2ENR~(RCC_APB2ENR_IOPAEN|RCC_APB2ENR_IOPBEN);// 设置SLEEPDEEP位SCB-SCR|SCB_SCR_SLEEPDEEP_Msk;// 选择电压调节器为低功耗模式PWR-CR|PWR_CR_LPDS;// 进入停止模式__WFI();// 唤醒后重新初始化时钟SystemClock_Config();}2.3.3 待机模式流程DES-009待机模式流程voidEnter_Standby_Mode(void){// 使能WKUP引脚PWR-CSR|PWR_CSR_EWUP;// 清除唤醒标志PWR-CR|PWR_CR_CWUF;// 设置SLEEPDEEP位SCB-SCR|SCB_SCR_SLEEPDEEP_Msk;// 进入待机模式PWR-CR|PWR_CR_PDDS;__WFI();// 唤醒后系统复位重新启动}## 三、唤醒源定义Spec ### 3.1 唤醒源定义Spec模板 markdown ## 唤醒源定义Spec ### 3.1 唤醒源类型 - DES-001[唤醒源名称] - 唤醒源类型[外部中断/RTC/串口/...] - 支持的休眠模式[模式列表] - 唤醒延迟[延迟时间] ### 3.2 唤醒条件 - DES-002唤醒条件 - 触发条件[条件] - 触发方式[上升沿/下降沿/电平] ### 3.3 唤醒流程 - DES-003唤醒流程 - 步骤1[步骤] - 步骤2[步骤] - 步骤3[步骤]3.2 唤醒源定义Spec示例示例一外部中断唤醒## 唤醒源定义Spec外部中断唤醒 ### 3.1 唤醒源类型 - DES-001EXTI0唤醒 - 唤醒源类型外部中断EXTI0 - 支持的休眠模式睡眠模式、停止模式 - 唤醒延迟1us睡眠模式~10us停止模式 ### 3.2 唤醒条件 - DES-002唤醒条件 - 触发源PA0引脚按键 - 触发方式上升沿按键按下 ### 3.3 唤醒配置 - DES-003唤醒配置代码 c void EXTI0_Wakeup_Init(void) { // 配置PA0为输入 RCC-APB2ENR | RCC_APB2ENR_IOPAEN; GPIOA-CRL ~GPIO_CRL_MODE0; // 输入模式 GPIOA-CRL ~GPIO_CRL_CNF0; // 浮空输入 // 配置EXTI0 RCC-APB2ENR | RCC_APB2ENR_AFIOEN; AFIO-EXTICR[0] | AFIO_EXTICR1_EXTI0_PA; // PA0 EXTI-IMR | EXTI_IMR_IM0; // 使能中断线0 EXTI-RTSR | EXTI_RTSR_RT0; // 上升沿触发 // 配置NVIC停止模式唤醒不需要使能中断 // NVIC_EnableIRQ(EXTI0_IRQn); }**示例二RTC闹钟唤醒** markdown ## 唤醒源定义SpecRTC闹钟唤醒 ### 3.1 唤醒源类型 - DES-001RTC闹钟唤醒 - 唤醒源类型RTC闹钟 - 支持的休眠模式睡眠模式、停止模式、待机模式 - 唤醒延迟1us睡眠~10us停止~50ms待机 ### 3.2 唤醒条件 - DES-002唤醒条件 - 触发源RTC闹钟 - 触发方式RTC计数器等于闹钟值 ### 3.3 唤醒配置 - DES-003唤醒配置代码 c void RTC_Alarm_Wakeup_Init(void) { // 使能PWR和BKP时钟 RCC-APB1ENR | RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN; // 使能RTC和备份域写访问 PWR-CR | PWR_CR_DBP; // 配置RTC RCC-BDCR | RCC_BDCR_RTCEN; // 使能RTC // 设置RTC预分频 RTC-PRLH 0; RTC-PRLL 32768 - 1; // 1Hz // 设置闹钟10秒后唤醒 RTC-ALRH 0; RTC-ALRL RTC-CNTH 16 | RTC-CNTL 10; // 使能闹钟中断 RTC-CRH | RTC_CRH_ALRIE; // 配置NVIC NVIC_EnableIRQ(RTCAlarm_IRQn); // 使能RTC闹钟唤醒待机模式 PWR-CSR | PWR_CSR_EWUP; }**示例三串口唤醒** markdown ## 唤醒源定义SpecUSART唤醒 ### 3.1 唤醒源类型 - DES-001USART唤醒 - 唤醒源类型USART接收中断 - 支持的休眠模式睡眠模式、停止模式 - 唤醒延迟1us睡眠~10us停止 ### 3.2 唤醒条件 - DES-002唤醒条件 - 触发源USART接收寄存器非空 - 触发方式接收到数据 ### 3.3 唤醒配置 - DES-003唤醒配置代码 c void USART_Wakeup_Init(void) { // 配置USART USART1-CR1 | USART_CR1_RXNEIE; // 使能接收中断 // 配置NVIC停止模式唤醒需要使能中断 NVIC_EnableIRQ(USART1_IRQn); }## 四、功耗约束Spec ### 4.1 功耗约束Spec模板 markdown ## 功耗约束Spec ### 4.1 各模式功耗 - DES-001[模式名称]功耗 - 典型功耗[功耗值] - 最大功耗[功耗值] - 测量条件[条件] ### 4.2 平均功耗 - DES-002平均功耗 - 计算方法[方法] - 目标功耗[目标值] - 实际功耗[实际值] ### 4.3 峰值功耗 - DES-003峰值功耗 - 峰值场景[场景] - 峰值功耗[功耗值] - 持续时间[时间]4.2 功耗约束Spec示例示例一温湿度传感器节点功耗## 功耗约束Spec温湿度传感器节点 ### 4.1 各模式功耗 #### 4.1.1 运行模式功耗 - DES-001运行模式功耗 - 典型功耗10mA3.3V - 最大功耗15mA3.3V全速运行 - 测量条件CPU运行72MHz外设全开 #### 4.1.2 睡眠模式功耗 - DES-002睡眠模式功耗 - 典型功耗2mA3.3V - 最大功耗3mA3.3V - 测量条件CPU休眠外设运行 #### 4.1.3 停止模式功耗 - DES-003停止模式功耗 - 典型功耗20uA3.3V - 最大功耗50uA3.3V - 测量条件CPU和时钟停止RTC运行 #### 4.1.4 待机模式功耗 - DES-004待机模式功耗 - 典型功耗2uA3.3V - 最大功耗5uA3.3V - 测量条件仅RTC和WKUP引脚可用 ### 4.2 平均功耗计算 #### 4.2.1 工作模式 - DES-005工作模式 - 采集周期10秒 - 采集时间100ms读取传感器发送数据 - 休眠时间9.9秒停止模式 #### 4.2.2 平均功耗计算 - DES-006平均功耗 - 运行功耗10mA × 100ms 1mA·s - 休眠功耗20uA × 9900ms 198uA·s - 平均功耗(1mA·s 198uA·s) / 10s 118uA - 目标功耗200uA - 结论满足要求 #### 4.2.3 电池寿命估算 - DES-007电池寿命 - 电池容量1000mAhCR2032 - 平均功耗118uA - 电池寿命1000mAh / 0.118mA ≈ 8475小时 ≈ 353天 - 目标寿命1年 - 结论满足要求 ### 4.3 峰值功耗 #### 4.3.1 峰值场景 - DES-008峰值场景 - 场景发送数据时 - 峰值功耗15mA运行模式 20mA无线发送 35mA - 持续时间50ms - 电源承受能力需确保电源能提供35mA峰值电流五、低功耗策略Spec5.1 低功耗策略Spec模板## 低功耗策略Spec ### 5.1 外设管理 - DES-001外设管理策略 - 策略[策略描述] - 外设列表[外设列表] - 管理方法[方法] ### 5.2 时钟管理 - DES-002时钟管理策略 - 策略[策略描述] - 时钟配置[配置] - 切换方法[方法] ### 5.3 唤醒后处理 - DES-003唤醒后处理 - 处理流程[流程] - 恢复操作[操作]5.2 低功耗策略Spec示例示例一外设管理策略## 低功耗策略Spec外设管理 ### 5.1 外设管理策略 - DES-001外设管理策略 - 策略进入休眠前关闭不必要的外设唤醒后重新初始化 - 外设列表 - GPIO保持必要引脚配置 - USART休眠前关闭唤醒后重新初始化 - SPI休眠前关闭唤醒后重新初始化 - I2C休眠前关闭唤醒后重新初始化 - ADC休眠前关闭唤醒后重新初始化 - TIM保持RTC定时器关闭其他定时器 ### 5.2 外设关闭代码 c void Disable_Peripherals(void) { // 关闭USART1 USART1-CR1 ~USART_CR1_UE; RCC-APB2ENR ~RCC_APB2ENR_USART1EN; // 关闭SPI1 SPI1-CR1 ~SPI_CR1_SPE; RCC-APB2ENR ~RCC_APB2ENR_SPI1EN; // 关闭I2C1 I2C1-CR1 ~I2C_CR1_PE; RCC-APB1ENR ~RCC_APB1ENR_I2C1EN; // 关闭ADC1 ADC1-CR2 ~ADC_CR2_ADON; RCC-APB2ENR ~RCC_APB2ENR_ADC1EN; // 关闭TIM2、TIM3 TIM2-CR1 ~TIM_CR1_CEN; TIM3-CR1 ~TIM_CR1_CEN; RCC-APB1ENR ~(RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN); }5.3 外设恢复代码voidEnable_Peripherals(void){// 重新初始化外设USART_Init();SPI_Init();I2C_Init();ADC_Init();TIM_Init();}**示例二时钟管理策略** markdown ## 低功耗策略Spec时钟管理 ### 5.1 时钟管理策略 - DES-001时钟管理策略 - 策略运行时使用HSEPLL72MHz休眠时切换到HSI8MHz - 时钟配置 - 运行时钟HSE8MHz PLL×9 72MHz - 休眠时钟HSI8MHz - 切换方法进入休眠前切换到HSI唤醒后切换回PLL ### 5.2 时钟切换代码 c void Switch_To_HSI(void) { // 使能HSI RCC-CR | RCC_CR_HSION; while ((RCC-CR RCC_CR_HSIRDY) 0); // 切换系统时钟到HSI RCC-CFGR (RCC-CFGR ~RCC_CFGR_SW) | RCC_CFGR_SW_HSI; while ((RCC-CFGR RCC_CFGR_SWS) ! RCC_CFGR_SWS_HSI); // 关闭PLL RCC-CR ~RCC_CR_PLLON; } void Switch_To_PLL(void) { // 使能HSE RCC-CR | RCC_CR_HSEON; while ((RCC-CR RCC_CR_HSERDY) 0); // 配置PLL RCC-CFGR | RCC_CFGR_PLLSRC; RCC-CFGR | RCC_CFGR_PLLMULL9; // 使能PLL RCC-CR | RCC_CR_PLLON; while ((RCC-CR RCC_CR_PLLRDY) 0); // 切换系统时钟到PLL RCC-CFGR (RCC-CFGR ~RCC_CFGR_SW) | RCC_CFGR_SW_PLL; while ((RCC-CFGR RCC_CFGR_SWS) ! RCC_CFGR_SWS_PLL); }**示例三唤醒后处理** markdown ## 低功耗策略Spec唤醒后处理 ### 5.1 唤醒后处理流程 - DES-001唤醒后处理流程 - 步骤1恢复时钟如果是停止模式 - 步骤2重新初始化外设 - 步骤3恢复系统状态 - 步骤4执行唤醒任务 ### 5.2 唤醒处理代码 c void Wakeup_Handler(void) { // 判断唤醒源 if (PWR-CSR PWR_CSR_WUF) { // 清除唤醒标志 PWR-CR | PWR_CR_CWUF; // 恢复时钟 Switch_To_PLL(); // 重新初始化外设 Enable_Peripherals(); // 恢复系统状态 Restore_System_State(); // 执行唤醒任务 Execute_Wakeup_Task(); } }## 六、低功耗固件Spec完整示例 ### 6.1 完整低功耗固件Spec温湿度传感器节点 markdown ## 低功耗固件Spec温湿度传感器节点 ### 1. 休眠模式定义 #### 1.1 主要休眠模式 - DES-001停止模式 - 模式类型停止模式Stop Mode - 功耗约20uA - 唤醒时间约10us - 唤醒源RTC闹钟 ### 2. 唤醒源定义 #### 2.1 RTC闹钟唤醒 - DES-002RTC闹钟唤醒 - 唤醒周期10秒 - 唤醒任务读取传感器数据并发送 ### 3. 功耗约束 #### 3.1 目标功耗 - DES-003目标功耗 - 平均功耗200uA - 电池寿命1年CR2032电池 #### 3.2 实际功耗 - DES-004实际功耗 - 运行功耗10mA100ms - 休眠功耗20uA9.9s - 平均功耗118uA - 电池寿命353天 ### 4. 低功耗策略 #### 4.1 外设管理 - DES-005外设管理 - 休眠前关闭所有外设 - 唤醒后重新初始化必要外设 #### 4.2 时钟管理 - DES-006时钟管理 - 休眠前切换到HSI8MHz - 唤醒后切换到PLL72MHz ### 5. 完整工作流程代码 c void LowPower_Main(void) { // 初始化 System_Init(); RTC_Alarm_Wakeup_Init(); while (1) { // 读取传感器数据 float temperature, humidity; SHT30_Read(temperature, humidity); // 发送数据 Wireless_Send(temperature, humidity); // 关闭外设 Disable_Peripherals(); // 切换到低频时钟 Switch_To_HSI(); // 设置RTC闹钟10秒后唤醒 RTC_SetAlarm(10); // 进入停止模式 Enter_Stop_Mode(); // 唤醒后处理 // 恢复时钟 Switch_To_PLL(); // 重新初始化外设 Enable_Peripherals(); } }## 七、本讲核心要点 ### 7.1 记住这三句话 1. **低功耗Spec定义休眠机制休眠模式、唤醒源、功耗约束、低功耗策略** 2. **选择合适休眠模式平衡功耗、唤醒时间、功能可用性** 3. **功耗优化系统化外设管理、时钟管理、唤醒后处理** ### 7.2 实践建议 **对于新手** - 学习STM32低功耗模式 - 学习唤醒源配置 - 学习功耗测量方法 **对于有经验工程师** - 建立低功耗Spec模板 - 使用Spec约束低功耗设计 - 使用Spec指导功耗优化 **对于团队负责人** - 建立低功耗Spec编写规范 - 培训团队低功耗设计方法 - 建立功耗审查流程 ### 7.3 下讲预告 第51讲将详细讲解**工控固件安全Spec禁止野指针、禁止死循环、看门狗约束** 如何定义工控固件安全Spec、保证系统安全下一讲将详细讲解。

相关新闻

5种企业级多语言部署策略:Baserow全球化架构深度解析

5种企业级多语言部署策略:Baserow全球化架构深度解析

5种企业级多语言部署策略:Baserow全球化架构深度解析 【免费下载链接】baserow Build databases, automations, apps & agents with AI — no code. Open source platform available on cloud and self-hosted. GDPR, HIPAA, SOC 2 compliant. Best Airtable al…

2026/11/2 15:25:12 阅读更多 →
如何用Pixelle-Video轻松制作AI短视频:5分钟从零到发布完整指南

如何用Pixelle-Video轻松制作AI短视频:5分钟从零到发布完整指南

如何用Pixelle-Video轻松制作AI短视频:5分钟从零到发布完整指南 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 想象一下&am…

2026/11/3 4:08:39 阅读更多 →
终极macOS窗口管理指南:用Rectangle告别鼠标拖拽

终极macOS窗口管理指南:用Rectangle告别鼠标拖拽

终极macOS窗口管理指南:用Rectangle告别鼠标拖拽 【免费下载链接】Rectangle Move and resize windows on macOS with keyboard shortcuts and snap areas 项目地址: https://gitcode.com/gh_mirrors/re/Rectangle Rectangle是一款基于Spectacle开发的macOS窗…

2026/11/2 20:46:41 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻