废话就不说了,直接上代码和步骤。
(1) go to project->Oprions and find the C/C++ Compiler->Preprocessor ,在Defined symbols:对话框中输入如下设置:
ZDO_ENDDEVICE
REFLECTOR
POWER_SAVING
第一步完成。
(2) 修改f8wConfig.cfg文件如下,
-DRFD_RCVC_ALWAYS_ON=FALSE//关闭接收器,设备将无法接收数据,能最大程度降低功耗
-DPOLL_RATE=0
-DQUEUED_POLL_RATE=0
-DRESPONSE_POLL_RATE=0
-DREJOIN_POLL_RATE=440
第二步完成。
(3) 修改OnBoard文件按键的触发方式。
HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);
第三步完成。
完成以上几个步骤后,将程序下载在板子上,在线调试,看下程序能跑进void osal_pwrmgr_powerconserve( void )函数中不,如果能运行至next = osal_next_timeout();这一句,那证明软件已经能进入低功耗方式了,但是有些人会发现,功耗还在ma级别以上,没达到手册上说的ua级别,那我按我遇到的情况来简单解释一下,因为你在最后一次调用osal_start_timerEx();时使用的时间成了协议栈定时睡眠的时间,这个时间越长,那芯片睡眠的时间就越久,功耗也就越低。如果不知道自己最后一次调用osal_start_timerEx()是哪个的,也不知道这个睡眠时间是多少的话,我可以介绍一个简单的方法,那就是我们认为手动的去设置这个睡眠时间,那如何设置呢?
点击打开OSAL_PwrMgr文件,找到void osal_pwrmgr_powerconserve( void )函数的实现,next = osal_next_timeout();下面添加一句next = 2000;注意:这里的2000是我随便写的,这个值就是我们芯片睡眠时间,越长睡眠就越久,功耗也就越低,这个值最大可以设置到65535。这时你再测量下他的电流,就会发现惊喜了。
打完收工。