各位大神好,我在使用CH582M进行点对点通信,接收端在接收到数据之后通过USB上传到PC使用,接收端在工作一段时间之后RF再也无法接收数据,表现为两种情况,大部分情况是第一种情况:
对应的接收RF灯不在闪烁,而主程序在继续运行,主程序LED闪烁
主程序和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接口,而不用重启整个程序?