1087|4

91

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

读《RT-Thread设备驱动开发指南》--- 第五篇 [复制链接]

 
本帖最后由 xiaolinen 于 2023-9-28 15:28 编辑

读《RT-Thread设备驱动开发指南》---  PM设备驱动的学习

第一部分:认识PM组件

        PM组件采用分层的设计理念,分离架构和芯片相关的部分,提取公共部分作为核心,既保证应用层调用的接口统一性,又实现底层驱动适配的灵活性。框架结构图如下:

        个人拙见:

                1)PM组件是一个管理框架,我们应该根据实际情况使用,并不是梏桎,要求用上rt-thread就一定要用PM组件;

                2)既然是一个框架,就需要我们进行适配,根据应用层的业务需求,进行修改和验证,从而实现功耗最优

                3)PM组件框架不仅仅适用于rt-thred,同样可以移植到其他的rtos上去。

第二部分:使用PM组件

        在ENV工具中,开启PM组件,如图:

        文件存放位置:

 

第三部分:部分代码和实验现象
        代码:
/*
功能:深度睡眠
*/
void pm_bsp_enter_deepsleep(struct rt_pm *pm)
{

	HAL_SysTickDisable();
	if (pm->run_mode == PM_RUN_MODE_LOW_SPEED)
    {
        /* Enter LP SLEEP Mode, Enable low-power regulator */
         pmu_to_deepsleepmode(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);
    }
    else
    {
        /* Enter SLEEP Mode, Main regulator is ON */
        pmu_to_deepsleepmode(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);
    }
		HAL_SysTickEnable();
		
}

/*
功能:深度睡眠1
*/
void pm_bsp_enter_deepsleep_1(struct rt_pm *pm)
{
    
	HAL_SysTick_IRQ_Disable();
	if (pm->run_mode == PM_RUN_MODE_LOW_SPEED)
    {
        /* Enter LP SLEEP Mode, Enable low-power regulator */
         pmu_to_deepsleepmode_1(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);
    }
    else
    {
        /* Enter SLEEP Mode, Main regulator is ON */
        pmu_to_deepsleepmode_1(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);
    }
		HAL_SysTick_IRQ_Enable();
    
}

/*
功能:深度睡眠2
*/
void pm_bsp_enter_deepsleep_2(struct rt_pm *pm)
{
	rt_base_t level;
	//level = rt_hw_interrupt_disable();
	HAL_SysTick_IRQ_Disable();
    if (pm->run_mode == PM_RUN_MODE_LOW_SPEED)
    {
        /* Enter LP SLEEP Mode, Enable low-power regulator */
         pmu_to_deepsleepmode_2(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);
    }
    else
    {
        /* Enter SLEEP Mode, Main regulator is ON */
        pmu_to_deepsleepmode_2(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);
    }
				//system_lowpower_set(SCB_LPM_DEEPSLEEP);
		HAL_SysTick_IRQ_Enable();
		// rt_hw_interrupt_enable(level);

}

/*
功能:待机模式
*/
void pm_bsp_enter_standby(struct rt_pm *pm)
{
    pmu_to_standbymode(WFI_CMD);
}

        实现现象:

                设备正常运行工作状态:165mA;

                设备休眠状态(外接传感器掉电操作):27uA;

总结:

        调设备功耗是一个技术活,又是一个体力活,调功耗必然会遇到各种各样的问题,坐的住,耐下心来认真干,问题才会越来越少,切记不要一会儿心态崩了,一会儿心态又崩了,心态再崩多少次也没用,毕竟活是你的,你需要干完!!!现在呢,有了PM框架,不能说完全解决了我们的问题,但是至少为我们指明了部分解决方向;个人认为:rt-thread的精髓不仅仅在于它的系统,更多的还是它的组件,这些组件提供便利的同时,也向我们展示着一种编程思想。RT-Thread是一个优美的产品,值得我们去深入学习和充分应用。

 

 

最新回复

应该是标准版RTThread的才有这个组件吧?   详情 回复 发表于 2023-9-30 09:21
点赞 关注(1)
 

回复
举报

6787

帖子

2

TA的资源

版主

沙发
 

都没太关注这个PM电源管理组件,它会在MCU不工作的时候进入休眠吗?

点评

是的,在MCU需要的情况下,使MCU休眠  详情 回复 发表于 2023-9-28 17:22
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
wangerxian 发表于 2023-9-28 17:07 都没太关注这个PM电源管理组件,它会在MCU不工作的时候进入休眠吗?

是的,在MCU需要的情况下,使MCU休眠

点评

应该是标准版RTThread的才有这个组件吧?  详情 回复 发表于 2023-9-30 09:21
 
 
 

回复

6787

帖子

2

TA的资源

版主

4
 
xiaolinen 发表于 2023-9-28 17:22 是的,在MCU需要的情况下,使MCU休眠

应该是标准版RTThread的才有这个组件吧?

点评

是的  详情 回复 发表于 2023-10-1 22:43
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

5
 
wangerxian 发表于 2023-9-30 09:21 应该是标准版RTThread的才有这个组件吧?

是的

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
PIC系列单片机程序设计基础

这本书给了大家想学习PIC单片机的朋友一个很大的帮助该书是一本基础教程书初学着很好的教程

Protel99SE深度汉化补丁

目前汉化最深的补丁. 解压密码www.pp51.com

聊聊for循环

for循环是我最喜欢的循环结构了,本来以为我对for循环已经很了解了,但在最近是使用之中不断的出问题,所以我又对for循环进行 ...

在beaglebone上实现AM3359与FPGA的GPMC通信

作者:chenzhufly QQ:36886052 ( 转载请注明出处)1.参考资料 《AM335x ARM® Cortex™-A8 Microprocessors Technic ...

Infineon Position2Go开发套件测评--skypinglee

此内容由EEWORLD论坛 一、开箱 很荣幸能参与到这次的Infineon Position2Go雷达套件的评测,经过一周的等待,板卡终于 ...

电子血压计原理两个问题

电子血压计原理两个问题 1.袖带自动充气,到一定压力(比收缩压高30-50mmHg),此时收缩压都是未知的,血压计是如何判断当前 ...

32.768K晶体不起振,选型很重要!

在设计一个32位MCU作为工控机协处理的控制器项目时,外接了8M的有源晶振和32.768K的无源晶体。当时采用的是一颗国产插件的32.768 ...

【Beetle ESP32-C3】硬件分析

本帖最后由 dcexpert 于 2022-8-2 09:36 编辑 Beetle ESP32-C3 开发板的资料可以在 DFRobot 网站上找到,链接是:https://wik ...

分享个迷你T2资料

想要DIY的网友可以收个。一个DIY群里收来了群主作品的资料。 658949 658948 658947 658946 658945 658943 ...

《Rust实战》书友互动第五集:深入理解数据

从第五集开始,进入《Rust实战》的第二部分:揭开系统编程的神秘面纱,都有哪些东西需要我们去揭晓呢? 演绎时间:即 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表