#author("2021-03-24T13:32:08+08:00","default:Admin","Admin") [[ZigBee]] #author("2022-07-09T15:21:46+08:00","default:Admin","Admin") [[+TI+CC2530]] &color(red){※This article is based on ZigBee Stack 2.51.a}; * 设置低功耗模式 [#d3ca7fed] ** f8wConfig.cfg文件 [#s1881ad2] DRFD_RCVC_ALWAYS_ON定义为FALSE 这几个全部赋值0。 - DPOLL_RATE - DQUEUED_POLL_RATE - DRESPONSE_POLL_RATE - DREJOIN_POLL_RATE **预编译 [#b4be0239] .Options->C/C++Compiler->Defined symbols中添加预编译“POWER_SAVING”; **PWRMGR_BATTERY [#hf77383b] 在你的任务初始化中增加这么一句osal_pwrmgr_device(PWRMGR_BATTERY);否则,OS不会进入省电模式。注意所有的用户任务都必须执行这么一句,否则无法进入省电模式。 **睡眠方式 [#gc6c17e7] 找到void halSetSleepMode(void)函数,PCON = halSleepPconValue;这句决定你进入哪种省电模式,找到它定义的地方,我这边赋值是PCON_IDLE,将其改成HAL_SLEEP_TIMER或CC2530_PM2,即可进入PM2模式。想进入PM3同理。 * 省电的注意点 [#yc428a79] 以下做完了,才能实现了1.1uA的目标 作为第4点,即可进入PM2模式,但是并不以为则真的省电,可能几百个uA也可能若干个mA甚至几十个mA和没进入PM2一样。原因是,有其他任务在不停的唤醒CPU,导致电流下不来,需要注意哪几点? ** 键盘 [#u1d1e563] 如果采用扫描模式则,则不停唤醒CPU,需设置成中断模式,或加大扫描周期。 ** LED [#e52ea339] LED也有个任务,看看你的LED是不是频繁闪烁,如果是停掉。 ** ADC [#g30b1144] 我听别人说的,有个电池检测的任务不停进行电压采样,我这里没有。 ** 协议栈 [#efc6c1a1] *** 加入网络 [#p9e69341] 终端上电后或者断网后,会主动查找网络,导致无法进入省电模式。 解决办法:http://blog.csdn.net/shjhuang/article/details/51171369,TI论坛也有,我忘记链接了。 *** [#k704811b] VV大侠的http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/75525.aspx 当中的第4点。 *其他补充 [#r972c943] 重要函数void halSleep( uint16 osal_timeout ) + 首先将osal_timeout转成以320US为单位 + 获取下一次MAC定时器到期时间 + halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER; //为PM2,PM3模式。 没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。 + 唤醒 #codeprettify{{ POLL_RATE QUEUED_POLL_RATE RESPONSE_POLL_RATE }} &ref(ZigBee_体系结构.png); #hr(); コメント: #comment_kcaptcha