news 2026/10/21 0:00:54

在CH585M代码中如何精细化配置PMU(电源管理单元)和RAM保留

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在CH585M代码中如何精细化配置PMU(电源管理单元)和RAM保留
在CH585M代码中如何精细化配置PMU(电源管理单元)和RAM保留大小,以适配不同业务场景(如是否需要保留数据)并最大化降低功耗,下面结合硬件特性和可落地的代码,从「原理→核心函数→分场景实现→验证」全流程讲解:

一、先理解CH585M的PMU+RAM保留硬件特性

CH585M的低功耗核心是「PMU下电模式」和「RAM保留分级」的组合,两者直接决定休眠功耗:

PMU模式RAM保留选项休眠功耗(典型值)数据保留特性适用场景
Retention(保留)32K RAM(默认)1.1μA保留全部RAM数据,唤醒后直接使用需要保留大量中间数据
Retention(保留)16K RAM≈0.95μA保留16K RAM数据中等数据保留需求
Retention(保留)8K RAM≈0.8μA仅保留8K RAM数据仅需保留少量配置/计数数据
Deep(深度下电)无RAM保留≈0.5μA所有RAM数据丢失,唤醒后重初始化无需保留数据,追求极致功耗

二、实现精细化配置的核心函数

CH585M的SDK提供了2个核心函数,是精细化配置的基础,先理解参数含义:

1. RAM保留配置函数

voidPMU_RAMRetentionConfig(PMU_RAM_RETENTION_T size);
  • 入参PMU_RAM_RETENTION_T size:可选值如下(SDK枚举定义):
    • PMU_RAM_RETENTION_32K:保留全部32K RAM(默认)
    • PMU_RAM_RETENTION_16K:保留16K RAM
    • PMU_RAM_RETENTION_8K:仅保留8K RAM

2. PMU下电模式配置函数

voidPMU_PowerDownModeCfg(PMU_PWR_DOWN_MODE_T mode,uint32_twakeup_src);
  • 入参1PMU_PWR_DOWN_MODE_T mode:
    • PMU_PWR_DOWN_MODE_RETENTION:保留模式(配合RAM保留)
    • PMU_PWR_DOWN_MODE_DEEP:深度下电模式(无RAM保留)
  • 入参2wakeup_src:唤醒源(可组合):
    • PMU_PWR_DOWN_WAKEUP_RTC:RTC周期性唤醒(常用)
    • PMU_PWR_DOWN_WAKEUP_GPIO:GPIO外部中断唤醒
    • 0:仅依赖指定唤醒源(无额外唤醒)

三、分场景实现精细化PMU+RAM保留(可直接复用)

场景1:需保留少量数据(如唤醒计数)→8K RAM + Retention模式

这是最常用的平衡方案,功耗低且保留关键数据,完整代码片段:

#include"CH58x_common.h"// 定义需要保留的全局变量(放入保留RAM区)__attribute__((section(".ram_retention")))uint32_twakeup_count=0;// 唤醒计数,保留在8K RAM中/********************************************************************* * @fn PMU_RAM_Config_MinData * @brief 精细化配置:8K RAM保留 + Retention模式 + RTC唤醒 * @return none ********************************************************************/voidPMU_RAM_Config_MinData(void){// 前置步骤:禁用所有冗余时钟(必做,否则时钟泄漏拉高功耗)RCC_PeriphClockCmd(RCC_PERIPH_ALL,DISABLE);RCC_PeriphClockCmd(RCC_PERIPH_RTC,ENABLE);// 仅保留RTC时钟// 步骤1:配置8K RAM保留(核心精细化点)PMU_RAMRetentionConfig(PMU_RAM_RETENTION_8K);// 步骤2:配置PMU Retention模式,仅RTC唤醒PMU_PowerDownModeCfg(PMU_PWR_DOWN_MODE_RETENTION,PMU_PWR_DOWN_WAKEUP_RTC);// 唤醒计数+1(验证数据是否保留)wakeup_count++;}// 主函数中调用intmain(void){System_Init();while(1){// 业务逻辑:完成后进入精细化低功耗PMU_RAM_Config_MinData();}}

场景2:无需保留任何数据→无RAM保留 + Deep模式

追求极致功耗,唤醒后重新初始化所有外设,代码片段:

/********************************************************************* * @fn PMU_RAM_Config_DeepSleep * @brief 精细化配置:无RAM保留 + Deep模式 + RTC唤醒 * @return none ********************************************************************/voidPMU_RAM_Config_DeepSleep(void){// 前置步骤:禁用所有时钟RCC_PeriphClockCmd(RCC_PERIPH_ALL,DISABLE);RCC_PeriphClockCmd(RCC_PERIPH_RTC,ENABLE);// 步骤1:Deep模式无需配置RAM保留(自动无保留)// 步骤2:配置PMU Deep模式,仅RTC唤醒PMU_PowerDownModeCfg(PMU_PWR_DOWN_MODE_DEEP,PMU_PWR_DOWN_WAKEUP_RTC);}// 主函数中调用(唤醒后需重新初始化外设)intmain(void){while(1){// 唤醒后重新初始化所有外设System_Init();SX1262_Init();W25Q16_Init();// 完成业务后进入深度下电PMU_RAM_Config_DeepSleep();}}

场景3:需保留较多数据→16K/32K RAM + Retention模式

仅在需要保留大量数据时使用(如缓存接收的LoRa数据),代码片段:

/********************************************************************* * @fn PMU_RAM_Config_MoreData * @brief 精细化配置:16K RAM保留 + Retention模式 + RTC+GPIO唤醒 * @return none ********************************************************************/voidPMU_RAM_Config_MoreData(void){// 前置步骤:禁用冗余时钟RCC_PeriphClockCmd(RCC_PERIPH_ALL,DISABLE);RCC_PeriphClockCmd(RCC_PERIPH_RTC,ENABLE);// 步骤1:配置16K RAM保留(按需换32K)PMU_RAMRetentionConfig(PMU_RAM_RETENTION_16K);// 换32K则用PMU_RAM_RETENTION_32K// 步骤2:配置PMU Retention模式,RTC+GPIO双唤醒PMU_PowerDownModeCfg(PMU_PWR_DOWN_MODE_RETENTION,PMU_PWR_DOWN_WAKEUP_RTC|PMU_PWR_DOWN_WAKEUP_GPIO);}

四、关键注意事项(确保配置生效)

  1. 全局变量放入保留RAM区:
    若要保留数据,需给变量加__attribute__((section(".ram_retention")))属性,否则即使配置了RAM保留,变量也会丢失(SDK默认仅.ram_retention段保留)。
  2. 禁用冗余时钟是前提:
    无论哪种配置,必须先禁用RCC_PERIPH_ALL(除RTC),否则外设时钟泄漏会让功耗比理论值高0.5~1μA。
  3. 唤醒源匹配场景:
    • 仅周期性任务:选PMU_PWR_DOWN_WAKEUP_RTC;
    • 需紧急响应:加PMU_PWR_DOWN_WAKEUP_GPIO,但会轻微增加漏电(≈0.1μA)。

五、验证配置是否生效

  1. 功耗验证:
    • 8K RAM+Retention:CH585M休眠功耗≈0.8μA;
    • Deep模式:≈0.5μA;
    • 若功耗偏高,检查是否漏关时钟/GPIO未设为模拟输入。
  2. 数据保留验证:
    打印wakeup_count变量,若每次唤醒后计数递增,说明RAM保留生效;若重置为0,说明配置错误(如变量未加保留属性)。

总结

实现CH585M精细化PMU+RAM保留的核心是:

  1. 按业务需求选最小RAM保留(8K优先,非必要不选16K/32K);
  2. 按需选PMU模式(需保留数据→Retention,无需→Deep);
  3. 配置前必禁冗余时钟(否则功耗优化失效)。

这套配置方式可直接集成到之前的低功耗工程代码中,替换原有简单的PMU配置,进一步压低休眠功耗。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 7:44:49

传统企业数字化转型:AI视频生成在年报制作中的应用

传统企业数字化转型:AI视频生成在年报制作中的应用 引言:从静态年报到动态叙事的演进需求 传统企业的年度报告长期以来以PDF、PPT等静态文档形式呈现,内容多为数据图表与文字描述。尽管信息完整,但可读性差、传播力弱、受众参与度…

作者头像 李华
网站建设 2026/10/16 19:34:16

Python中一切皆对象:深入理解Python的对象模型

Python 中一切皆对象:深入理解 Python 的对象模型(2026 最新版) “一切皆对象”(Everything is an object)是 Python 最核心的设计哲学之一。这句话不仅仅是口号,而是贯穿 Python 语言底层实现的关键原则。…

作者头像 李华
网站建设 2026/10/15 13:22:54

SpringBoot集成DeepSeek

Spring Boot 集成 DeepSeek:2026 年最新完整指南 DeepSeek 是中国领先的开源大语言模型提供商(DeepSeek-V3、DeepSeek-R1 等),其 API 完全兼容 OpenAI 格式。这意味着你可以轻松在 Spring Boot 项目中使用它,尤其通过…

作者头像 李华
网站建设 2026/10/20 6:41:04

利用人工智能技术轻松打造专业学术风格的开题报告PPT范例

AI工具开题报告生成能力对比速览 工具名称 生成速度 内容完整度 参考文献质量 适用场景 AIbiye ⚡⚡⚡⚡ ⭐⭐⭐⭐ 15真实文献 理工科开题 AICheck ⚡⚡⚡ ⭐⭐⭐⭐⭐ 自动匹配领域 人文社科类 秒篇 ⚡⚡⚡⚡⚡ ⭐⭐⭐ 基础文献支持 紧急需求 AskPaper ⚡…

作者头像 李华
网站建设 2026/10/13 11:40:48

预算有限的小微企业,如何用技术平权实现高性价比精准引才?

“公司品牌知名度不高,预算有限,发布一个岗位大半个月收不到几份像样的简历……”这或许是不少中小企业HR,特别是小微企业HR负责人的共同烦恼。在传统招聘中,企业常面临“招人难、招人贵、招人没效果”的三重困境。一次招聘动辄花…

作者头像 李华
网站建设 2026/10/17 7:00:39

新闻报道可视化:重大事件图片转为动态重现视频

新闻报道可视化:重大事件图片转为动态重现视频 引言:静态图像的动态重生 在新闻报道中,重大事件往往以一张震撼人心的照片定格历史。然而,静态图像虽具冲击力,却难以完整还原现场的动态氛围与时间流动感。随着AI生成技…

作者头像 李华