求救:使用CH582M,RF模式通信,通信一段时间后无法继续通信

各位大神好,我在使用CH582M进行点对点通信,接收端在接收到数据之后通过USB上传到PC使用,接收端在工作一段时间之后RF再也无法接收数据,表现为两种情况,大部分情况是第一种情况:

  1. 对应的接收RF灯不在闪烁,而主程序在继续运行,主程序LED闪烁

  2. 主程序和RF都不再闪烁。

我做了以下尝试:

第一种尝试:为了解决第一种情况,我在多次没有接收到RF数据之后,尝试重新初始化RF相应的端口,而不复位USB,初始化之后还是无法再次接收到RF数据,这种处理情况失败;我的重新初始化RF的程序部分主要调用了Rf_Reset()函数。函数如下:


void RF_Reset()
{
    RF_Shut();
    CH58X_BLEInit();
    RF_RoleInit();
    RF_ReInit();
    RF_Shut();
   RF_Rx(TX_DATA, 10, settings.pair_addr&0xff, settings.pair_addr&0xff);
 }
    void RF_ReInit(void)
{
    uint8_t    state;
    rfConfig_t rfConfig;
    tmos_memset(&rfConfig, 0, sizeof(rfConfig_t));
    rfConfig.accessAddress = 0x71764129; // 禁止使用0x55555555以及0xAAAAAAAA ( 建议不超过24次位反转,且不超过连续的6个0或1 )
    rfConfig.CRCInit = 0x555555;
    rfConfig.Channel = 8;
    rfConfig.Frequency = 2480000;
    rfConfig.LLEMode = LLE_MODE_BASIC | LLE_MODE_EX_CHANNEL|LLE_MODE_PHY_CODED_S8; // 使能 LLE_MODE_EX_CHANNEL 表示 选择 rfConfig.Frequency 作为通信频点
   // rfConfig.LLEMode = LLE_MODE_BASIC | LLE_MODE_EX_CHANNEL|LLE_MODE_PHY_2M; // 使能 LLE_MODE_EX_CHANNEL 表示 选择 rfConfig.Frequency 作为通信频点
    rfConfig.rfStatusCB = RF_2G4StatusCallBack;
    rfConfig.RxMaxlen = 251;
    state = RF_Config(&rfConfig);
    RF_Rx(TX_DATA, 10, settings.pair_addr&0xff, settings.pair_addr&0xff);
    tmos_start_task(taskID, SBP_RF_PERIODIC_EVT, 50);
}

void RF_Init(void)
{
    taskID = TMOS_ProcessEventRegister(RF_ProcessEvent);
    RF_ReInit();

}

   第二种尝试:为了再次接收到数据,我直接在多次没有收到RF数据之后,重新启动程序,重启接收端之后可以接收到RF的数据,发送端一直没有变化,说明发送端是一直没有问题的;但是这种解决不了我的问题,重启后USB重新枚举,PC的应用程序也得重新打开了。

我的问题如下:

   1.为何会出现RF无法接收到数据的情况,出现这种情况如何调试?找到原因?如何查看RF的相应寄存器或者通过相关函数能判断当前的RF是正常的?

   2.如何通过程序恢复初始化RF接口,而不用重启整个程序?


你这种情况我没遇到。但是掉包严重,我直接放弃了。


RF模式应用很简单,就相当于无线串口,但是使用时必须注意Tx时,对端的Rx一定要打开,不然就是Tx发到了空中,对方收不到。


出现了问题,如何在不重新启动的情况下恢复RF呢?最近公司搞了1000套,问题一直卡这里了,压力山大,能否指导下


只有登录才能回复,可以选择微信账号登录