使用RF通讯,发送端可以直接调用协议栈的睡眠,即将HAL_SLEEP设置为true,使用tmos调用发送函数,
而接受端,是不可以这样使用的,接收端最好是保持接收状态。
@TECH_Hy非常感谢您的回复。
1、接收端也要保持低功耗的,接收端到约定时间点通过TMOS提前唤醒开启接收状态,接收完每个从设备发过来的数据后(假设2min)再次通过TMOS进行睡眠模式不可以吗?
2、是不是设备从sleep模式醒来进行RF通讯需要一定的时间,ms级的?
3、现已在最新CH579例程进行测试,将\BLE\RF_PHY移植到\BLE\Peripheral工程下,打开sleep,通过tmos唤醒设备来进行两个设备间相互通讯,会出现CRC error。任意一方出现CRC error后通讯不能再次接收数据。
通讯过程为:b设备先设置为RX-MODE,a设备为TX-mode发送数据给b设备,a设备发送完成后设置为接收,b设备收到a设备数据后转为TX-MODE给a设备回应。
已在CH57X_LowPower()里设置标志位来退出sleep。
HAL_SLEEP设置为true,并在CH57X_LowPower函数中设置sleep退出标志
通过蓝牙下发指令开启接收,并退出sleep
在睡眠函数中置flag的方法是可以实现的,如果仅是A和B通讯,可以使用auto模式,无需手动切换收发,出现crc后不再通讯显然是不合理的,可以检查下代码,是否是出现crc之后并没有再次打开发送或接收。
1、是一接收,多发送,采用的BASIC模式。
2、出现crc之后,再次打开接收或发送也是不行,只有重启设备
调用发送或接收之前是否调用了 RF_Shut();
调用了
如果方便的话,可以将你的代码发送到hy@wch.cn,我们来帮你看看,另外在邮件中也将你具体怎么测试的描述下。
已发送
问题已解决,上述功能可实现。