我是用的版本是Z-Stack Home 1.2,在做终端设备低功耗时发现halPwrMgtMode的值为0x03,同时也进入if (halSleepPconValue != 0 && MAC_PwrOffReq(MAC_PWR_SLEEP_DEEP) == MAC_SUCCESS)分支,这样是否可以说明模块已经进入了深度睡眠模式?
另外在上述情况下,测试模块功耗在8mA左右,串口也是可以正常操作读写的,从这里来看好像模块没有进入低功耗模式,不知道时什么原因造成的?
我的设置时这样的:
1.开启POWER_SAVING
2.RFD_RCVC_ALWAYS_ON=FALSE,
POLL_RATE=0
QUEUED_POLL_RATE=0
RESPONSE_POLL_RATE=0
3.pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY;
另外我想让模块的功耗在10微安左右,该如何操作?
YiKai Chen:
进入以及離開低功耗模式在hal_sleep.c的halSleep(),你可以用HAL_SLEEP_DEBUG_LED這個預編譯裡面去設置一個GPO來顯示进入以及離開低功耗模式確認看看是否进入以及離開低功耗模式
user4796768:
回复 YiKai Chen:
好的,我先试试再
user4796768:
回复 YiKai Chen:
你好,YK Chen!
刚才我测试了一下,使用我的开发板操作的,采用你的方法,的确时可以正常的进入和离开低功耗的,我注意到此时的halPwrMgtMode值一直为0x03,我是这样做的,按键触发模块离开低功耗模式,然后串口接收数据并处理 之后进入低功耗模式.然而我想通过这种方法来再模块上实现(模块上没有按键和LED),只通过UART0来实现;我的想法是将P0_4这个GPIO与UART的RX相连,设置P0_4为中断方式,当RX有数据时,触发中断来唤醒模块,然后由串口来处理数据.
按照我这种想法来实现,就出现了上面模块功耗8mA左右的情况.
YiKai Chen:
回复 user4796768:
触发中断来唤醒模块,然后由串口来处理数据,完成後有看到hal_sleep.c的halSleep()再次進入低功耗模式?
user4796768:
回复 YiKai Chen:
按照上面的描述,测得电流8mA左右,我感觉按照我的想法来实现的功能,没有使得模块进入和退出低功耗模式.
我是这样实现的,你看下哪里有错误,导致这个原因的
对P0_4的配置,在初始化和进入低功耗之前;P0SEL &= ~0x10; P0DIR &= ~0x10; PICTL &= ~0x01;PICTL |= 0x01;P0IEN |= 0x10;IEN1 |= 0x20;
P0INP &= 0x10; P0IFG = ~0x10;
中断函数:
osal_pwrmgr_device(PWRMGR_ALWAYS_ON);osal_pwrmgr_task_state(App_TaskID, PWRMGR_HOLD);CLKCONCMD &= ~0x40;while(CLKCONSTA & 0x40);CLKCONCMD &= ~0x47;
然后串口处理完数据之后:
osal_pwrmgr_device(PWRMGR_BATTERY);
osal_pwrmgr_task_state(App_TaskID, PWRMGR_CONSERVE);
user4796768:
回复 user4796768:
我是感觉对于P0_4中断触发的配置,好像没有起到作用,不知道为什么?另外直接将之前的按键P0_0修改到P0_4,也是不起作用.
user4796768:
回复 YiKai Chen:
你好!
能帮忙看看我的是哪里问题导致模块不能进入低功耗模式,还望指教!
YiKai Chen:
回复 user4796768:
P0INP &= 0x10; 這個不用設置,你要先確認你的P0_4中断触发起坐用吧
user4796768:
回复 YiKai Chen:
这样设置,我刚发现一直在不停的产生中断
YiKai Chen:
回复 user4796768:
用示波器看看是不是你的P0.4一直有信號進來