RTThread nano3.1.3系列之PM组件实现低功耗管理

 

目录

前言

背景

移植

1、文件拷贝

2、宏定义

3、添加底层驱动文件

4、OS TICK补偿

5、调用方法:

实现效果

注意事项


 

前言

 嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下,尽可能降低系统能耗以延长设备待机时间。高性能与有限的电池能量在嵌入式系统中矛盾最为突出,硬件低功耗设计与软件低功耗管理的联合应用成为解决矛盾的有效手段。-----RTThread 文档中心

背景

       

由于裸机上面低功耗在逻辑上实现较简单,但面对庞大的操作的系统,需要考虑多个线程之前的逻辑。所以研究RTT之初想到的是解决功耗问题,以下是实现简单的RTThread Nano版 PM组件对低功耗的管理。

移植

IDE: MDK5.28

RTOS内核版本:rtthread 3.1.3 nano版

硬件平台:STM32L051C8

NANO版本移植使用PM组件步骤:

1、文件拷贝

在完整版的rtthread 3.1.3上面拷贝以下文件到一个可以点灯的rtthread nano版工程:

pm.c

pm.h

rtdevice.h

 

2、宏定义

在rtconfig.h中添加以下定义:

#define RT_USING_DEVICE           //设备驱动

#define RT_USING_PM                   //PM组件

 

3、添加底层驱动文件

drv_pm.c 附件如下:

 

该文件实现低功耗具体实现的方法,如stm32芯片进入stop模式,那么在_drv_pm_enter函数中添加实现(由于文件较长,不允许添加附件,故上传至CSDN下载资源,链接:https://download.csdn.net/download/qq_34672688/12234833):

 

_drv_pm_enter 函数在drv_pm_hw_init被引用

 

 

4、OS TICK补偿

如需定时器补偿OS tick , 那么在drv_pm.c文件中实现该驱动。该方法实现的前提是进入对应的低功耗模式后该定时器仍然可用,不会被关闭时钟。如stm32下的LPTIM可用于低功耗模式下的计数或唤醒。第三步附件中实现的驱动并没有实现OStick补偿。

注意:若使用定时器补偿,请打开注释:

timer_mask = 1UL << PM_SLEEP_MODE_TIMER;

// PM_SLEEP_MODE_TIMER:该宏为对应的低功耗模式,若未使用,请置0,未初始化至0调试时发现导致硬中断:tidle

 

5、调用方法:

static void pm_mode_init(void)
{
	rt_pm_release(PM_SLEEP_MODE_NONE);
	rt_pm_release(PM_SLEEP_MODE_IDLE);
//	rt_pm_request(PM_SLEEP_MODE_DEEP);
}

void task(void)
{
     pm_mode_init();
     while (1)
      {
        /* USER CODE END WHILE */
	      LED_XOR();
	      static uint8_t count = 0;
	      char *p = rt_malloc(128);
	      rt_memcpy(p, "123456\r\n", 8);
	      rt_kprintf("p:%s\r\n", p);
	      rt_free(p);
	      if(count++ >10)
	      {
	    	  rt_kprintf("perpare enter low power\r\n");
	    	  rt_pm_request(PM_SLEEP_MODE_DEEP);
	    	  count = 0;
	      }
	      rt_thread_delay(500);
      }
}

实现效果

注意事项

  1. 根据外围电路,检查设备是否处于合理状态,避免出现外设漏电的情况; 根据产品自身情况,关闭相应休眠模式期间不使用的外设和时钟。

 

      2. 测试时切勿直接开机进入低功耗,否则若板子无复位按键会出现无法烧录的情况。出现该情况,参考文章解决:https://blog.csdn.net/Geekjin/article/details/79232405

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi,Mr.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值