我用三块ch582芯片,节点ABC,节点A发送给节点B,节点B发送给节点C。加入了睡眠。
目前有个问题就是,节点A第一次发送的信息,要等节点A发送第二次信息后后节点B才能第一次发的信息收到。节点C收到节点A第一次发送的信息要等节点A发送第三次信息时才能收到。
热门产品 :
CH641: PD及无线充电专用MCU
我用三块ch582芯片,节点ABC,节点A发送给节点B,节点B发送给节点C。加入了睡眠。
目前有个问题就是,节点A第一次发送的信息,要等节点A发送第二次信息后后节点B才能第一次发的信息收到。节点C收到节点A第一次发送的信息要等节点A发送第三次信息时才能收到。
是基于哪几个例程添加代码后做的测试?
sleep休眠期间,32M停振,无线收发机无法工作,无法通过发送射频信号的方式去唤醒接收方MCU。
B/C可以收到包,要么是A发包的瞬间,B/C刚好处于唤醒工作的状态,有机会开启接收扫描窗口;要么是有类似BLE连接、mesh的朋友-低功耗节点连接等之类的机制。
用的自配网例程来搞得。
相关代码:
PRINT("sleep mode sleep \n"); tmos_stop_task(halTaskID, HAL_REG_INIT_EVENT); //默认2分钟一次的校准先暂停 DelayMs(5); RTC_TRIGFunCfg(32768 * 10); PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_RTC_WAKE, Long_Delay);/* 使能RTC中断唤醒源 */ PFIC_EnableIRQ(RTC_IRQn);/* 使能RTC中断 */ /* 注意当主频为80M时,Sleep睡眠唤醒中断不可调用flash内代码 */ LowPower_Sleep(RB_PWR_RAM30K | RB_PWR_RAM2K); /* 只保留30+2K SRAM 供电 */ HSECFG_Current(HSE_RCur_100); /* 降为额定电流(低功耗函数中提升了HSE偏置电流) */ PFIC_DisableIRQ(RTC_IRQn); DelayMs(5); PRINT("wake.. \n"); DelayMs(20); tmos_set_event(halTaskID, HAL_REG_INIT_EVENT); //先校准RF,再开广播 ////********** tmos_start_task(App_TaskID, APP_NODE_TEST_EVT, 4800); //发送时长1600=1s
如上解释,RTC唤醒前的休眠阶段,是无法收包的。
mesh协议中有设计朋友-低功耗节点连接功能,朋友节点会代收发给低功耗节点的消息包,低功耗节点唤醒后第一时间向朋友节点拉取消息。