RF_PHY例程问题

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通信和蓝牙并存,也就是说外设设备能同时获取蓝牙协议栈的数据和没有蓝牙协议的数据这样子可以实现吗?谢谢

简单理解手动模式下  RF_Rx 就是接收; RF_Tx就是发送


如果是自动模式,RF_Rx 可以接收后自动启动发送。

2.4G可以和BLE共存  https://www.cnblogs.com/debugdabiaoge/p/16149660.html



谢谢,还有几个问题

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 error\n");
            }
            else if(crc == 2)
            {
                PRINT("match type error\n");
            }
            else
            {
                uint8_t i;
                PRINT("tx recv,rssi:%d\n", (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 error\n");
            }
            else if(crc == 2)
            {
                PRINT("match type error\n");
            }
            else
            {
                uint8_t i;
                PRINT("rx recv, rssi: %d\n", (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: %x\n", sta);
}

3、

bStatus_t RF_RoleInit( void );

在并存的时候需要调用吗?


image.png

除了FF其他都是自定义类型,收发类型要一致,否则无法匹配就不能收到彼此的包。

是的,在不确定RF状态的时候,shut可以保证开启你需要的收发状态。


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


你怎么开启休眠的?是开启了HAL-SLEEP吗?还是自己调用的休眠。
正常如果休眠的话,就开启HAL-SLEEP即可


你怎么开启休眠的?是开启了HAL-SLEEP吗?还是自己调用的休眠。
正常如果休眠的话,就开启HAL-SLEEP即可


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