各位大神好,我在使用CH582M進(jìn)行點(diǎn)對(duì)點(diǎn)通信,接收端在接收到數(shù)據(jù)之后通過(guò)USB上傳到PC使用,接收端在工作一段時(shí)間之后RF再也無(wú)法接收數(shù)據(jù),表現(xiàn)為兩種情況,大部分情況是第一種情況:
對(duì)應(yīng)的接收RF燈不在閃爍,而主程序在繼續(xù)運(yùn)行,主程序LED閃爍
主程序和RF都不再閃爍。
我做了以下嘗試:
第一種嘗試:為了解決第一種情況,我在多次沒(méi)有接收到RF數(shù)據(jù)之后,嘗試重新初始化RF相應(yīng)的端口,而不復(fù)位USB,初始化之后還是無(wú)法再次接收到RF數(shù)據(jù),這種處理情況失?。晃业闹匦鲁跏蓟疪F的程序部分主要調(diào)用了Rf_Reset()函數(shù)。函數(shù)如下:
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?(?建議不超過(guò)24次位反轉(zhuǎn),且不超過(guò)連續(xù)的6個(gè)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?作為通信頻點(diǎn) ???//?rfConfig.LLEMode?=?LLE_MODE_BASIC?|?LLE_MODE_EX_CHANNEL|LLE_MODE_PHY_2M;?//?使能?LLE_MODE_EX_CHANNEL?表示?選擇?rfConfig.Frequency?作為通信頻點(diǎn) ????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(); }
? ?第二種嘗試:為了再次接收到數(shù)據(jù),我直接在多次沒(méi)有收到RF數(shù)據(jù)之后,重新啟動(dòng)程序,重啟接收端之后可以接收到RF的數(shù)據(jù),發(fā)送端一直沒(méi)有變化,說(shuō)明發(fā)送端是一直沒(méi)有問(wèn)題的;但是這種解決不了我的問(wèn)題,重啟后USB重新枚舉,PC的應(yīng)用程序也得重新打開(kāi)了。
我的問(wèn)題如下:
? ?1.為何會(huì)出現(xiàn)RF無(wú)法接收到數(shù)據(jù)的情況,出現(xiàn)這種情況如何調(diào)試?找到原因?如何查看RF的相應(yīng)寄存器或者通過(guò)相關(guān)函數(shù)能判斷當(dāng)前的RF是正常的?
? ?2.如何通過(guò)程序恢復(fù)初始化RF接口,而不用重啟整個(gè)程序?