发布时间:2026/7/30 20:19:25
第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、保证系统安全下一讲将详细讲解。

相关新闻

2026/7/30 20:14:25

大模型Agent技术架构与金融领域实践指南

1. 大模型Agent技术全景解析最近半年,大模型Agent技术突然成为AI领域最炙手可热的研究方向。作为同时具备大模型理解能力和自主行动能力的智能体,Agent正在彻底改变人机交互的方式。我在实际项目中发现,一个设计良好的Agent系统可以替代传统工…

2026/7/30 20:14:25

2026数字化决策的隐性黑盒:为什么静态后视镜报表在引发决策时滞

在多源数据爆发与业务高频迭代的现代决策语境下,许多企业与敏捷团队都曾陷入过一种典型的“数据失真与决策时滞”困境:数据报表看似堆叠得满满当当,但面对突发的技术故障、市场异动或用户行为骤变,团队依然只能依赖静态的离线周报…

2026/7/30 20:14:25

C#学习路线图:从基础语法到项目实战的完整指南

1. 从“Hello World”到独立项目:一份不走弯路的C#学习路线图 如果你在搜索引擎里输入“C#学习路线”,大概率会看到一堆堆砌着“基础语法”、“面向对象”、“.NET框架”的清单,或者是一张复杂到让人望而生畏的思维导图。这些内容本身没错&am…

2026/7/30 21:14:29

多元研究方法在人文社科领域的应用路径与实践价值探析

AI Agent时代的科研革命 这三个工具让你的效率提升十倍 传统科研模式正在被AI彻底颠覆。过去需要几周甚至几个月完成的文献调研和综述写作,现在几天就能搞定。过去需要反复调试才能复现的实验,现在一键就能完成。这三个基于最新AI技术的科研工具&#x…

2026/7/30 21:14:29

AI搜索工具怎么选?GPT-Search、Perplexity、You.com、Phind、Arc Search、Kimi、百度文心一言7大平台横向评测(附响应延迟/准确率/多模态支持原始测试表)

更多请点击: https://intelliparadigm.com 第一章:AI搜索工具怎么选?GPT-Search、Perplexity、You.com、Phind、Arc Search、Kimi、百度文心一言7大平台横向评测(附响应延迟/准确率/多模态支持原始测试表) 当前AI原生…

2026/7/30 21:14:29

知乎高赞回答集锦(不定时更新)

知乎问题1:为什么很多80后、90后都很不成熟,不能独当一面,甚至还需要父母为其遮风挡雨? 我一直认为,80.90后,尤其是83-97这十五年左右的人,是中国历史上,前无古人后无来者的, 一代…

2026/7/29 22:32:30

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/30 0:01:39

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:01:39

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/29 13:12:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…