WCH沁恒单片机
直播中

李军

7年用户 1234经验值
私信 关注
[问答]

如何实现2.4G通信和蓝牙并存?

extern bStatus_t RF_Rx( uint8_t *txBuf, uint8_t txLen, uint8_t pktRxType, uint8_t pktTxType );
extern bStatus_t RF_Tx( uint8_t *txBuf, uint8_t txLen, uint8_t pktTxType, uint8_t pktRxType );
这两个函数有什么区别,看起来怎么都可以发送,那么RX模式下的TX和TX模式下的TX有啥区别呢?
另外,我想实现2.4G通信和蓝牙并存,也就是说外设设备能同时获取蓝牙协议栈的数据和没有蓝牙协议的数据这样子可以实现吗?谢谢
  

回帖(5)

李慎梓

2022-7-29 10:14:31
简单理解手动模式下 RF_Rx 就是接收; RF_Tx就是发送
如果是自动模式,RF_Rx 可以接收后自动启动发送。
举报

陈梅

2022-7-29 10:14:38
谢谢,还有几个问题
1、extern bStatus_t RF_Rx( uint8_t *txBuf, uint8_t txLen, uint8_t pktRxType, uint8_t pktTxType );中pktRxType和pktTxType,有哪些消息类型,有什么资料吗?
2、ch573例程中,在回调函数里面也调用了RF_Shut(),博客里的那篇文章里却没有,应该用哪个?是不是在收发之前都调用一下RF_Shut(),来确保都能顺利进入收发模式

  void RF_2G4StatusCallBack(uint8_t sta, uint8_t crc, uint8_t *rxBuf)
  {
  switch(sta)
  {
  case TX_MODE_TX_FINISH:
  {
  break;
  }
  case TX_MODE_TX_FAIL:
  {
  break;
  }
  case TX_MODE_RX_DATA:
  {
  RF_Shut();
  if(crc == 1)
  {
  PRINT(“crc errorn”);
  }
  else if(crc == 2)
  {
  PRINT(“match type errorn”);
  }
  else
  {
  uint8_t i;
  PRINT(“tx recv,rssi:%dn”, (int8_t)rxBuf[0]);
  PRINT(“len:%d-”, rxBuf[1]);
  for(i = 0; i 《 rxBuf[1]; i++)
  PRINT(“%x ”, rxBuf[i + 2]);
  PRINT(“n”);
  }
  break;
  }
  case TX_MODE_RX_TIMEOUT: // Timeout is about 200us
  {
  break;
  }
  case RX_MODE_RX_DATA:
  {
  if(crc == 1)
  {
  PRINT(“crc errorn”);
  }
  else if(crc == 2)
  {
  PRINT(“match type errorn”);
  }
  else
  {
  uint8_t i;
  PRINT(“rx recv, rssi: %dn”, (int8_t)rxBuf[0]);
  PRINT(“len: %d-”, rxBuf[1]);
  for(i = 0; i 《 rxBuf[1]; i++)
  PRINT(“%x ”, rxBuf[i + 2]);
  PRINT(“n”);
  }
  tmos_set_event(taskID, SBP_RF_RF_RX_EVT);
  break;
  }
  case RX_MODE_TX_FINISH:
  {
  tmos_set_event(taskID, SBP_RF_RF_RX_EVT);
  break;
  }
  case RX_MODE_TX_FAIL:
  {
  break;
  }
  }
  PRINT(“STA: %xn”, sta);
  }
  3、
  bStatus_t RF_RoleInit( void );
在并存的时候需要调用吗?
举报

李婷

2022-7-29 10:14:43

除了FF其他都是自定义类型,收发类型要一致,否则无法匹配就不能收到彼此的包。
是的,在不确定RF状态的时候,shut可以保证开启你需要的收发状态。
举报

贺楠

2022-7-29 10:14:48
也顺便问一下,BLE和RF可以正常兼容运行了,但是我在RF发送完就进入休眠状态,按键唤醒后,却发不出RF数据,难道要重新初始化RF?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分