1219|4

92

帖子

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)
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

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

点评

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

回复

92

帖子

0

TA的资源

一粒金砂(高级)

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

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

点评

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

回复

7244

帖子

2

TA的资源

版主

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

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

点评

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

回复

92

帖子

0

TA的资源

一粒金砂(高级)

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

是的

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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