本文以CH592为例进行演示,使用RF_PHY例程发送不可连接广播和接收不可连接广播。

一.初始化配置

void RF_Init(void)
{
    uint8_t    state;
    rfConfig_t rf_Config;

    tmos_memset(&rf_Config, 0, sizeof(rfConfig_t));
    taskID = TMOS_ProcessEventRegister(RF_ProcessEvent);
    rf_Config.accessAddress = 0x8E89BED6;                             // 使用蓝牙广播接入地址0x8E89BED6
    rf_Config.CRCInit = 0x555555;
    rf_Config.Channel = 39;                                           //配置为37或38或39
    rf_Config.Frequency = 2480000;
#if(RF_AUTO_MODE_EXAM)
    rf_Config.LLEMode = LLE_MODE_AUTO;
#else
    rf_Config.LLEMode = LLE_MODE_BASIC;                               //LLE_MODE_EX_CHANNEL不置1使用信道
#endif
    rf_Config.rfStatusCB = RF_2G4StatusCallBack;
    rf_Config.RxMaxlen = 251;
    state = RF_Config(&rf_Config);
    PRINT("rf 2.4g init: %x\n", state);
//    { // RX mode
//#if(RF_AUTO_MODE_EXAM)
//        rx_end_flag = FALSE;
//#endif
//        state = RF_Rx(TX_DATA, 10, 0xFF, 0xFF);
//        PRINT("RX mode.state = %x\n", state);
//    }

    { // TX mode
        tmos_set_event( taskID , SBP_RF_PERIODIC_EVT );
    }
}

二.发送数据配置

 uint8_t TX_DATA[] = {
                    0x02,0x02,0x03,0xE4,0xC2,0x84,  //mac addr
                    0x04,0x09,'B','L','E'           //adv data
};

if(events & SBP_RF_PERIODIC_EVT)
{
 RF_Shut();
 tx_end_flag = FALSE;
 if(!RF_Tx(TX_DATA, sizeof(TX_DATA), 0x02, 0xFF))
 {
 RF_Wait_Tx_End();
 }
 tmos_start_task(taskID, SBP_RF_PERIODIC_EVT, 80);
 return events ^ SBP_RF_PERIODIC_EVT;
}

三.接收数据处理

        case RX_MODE_RX_DATA:
        {
            if (crc == 0) {
                uint8_t i;
#if(RF_AUTO_MODE_EXAM)
                RF_Wait_Rx_End();
#endif
                uint8_t pkt_length = rxBuf[1];
                int8_t rssi = (int8_t)rxBuf[0];
                uint8_t adv_length = pkt_length - 6;
 
                PRINT("adv_len:%u,rssi:%d\n",adv_length,rssi);
                PRINT("mac_addr:");
                for (i = 0; i < 6; i++) {
                    PRINT("%x ", rxBuf[i + 2]);
                }
                PRINT("\r\n");
                PRINT("adv_data:");
                for (i = 0; i < adv_length; i++) {
                    PRINT("%x ", rxBuf[i + 8]);
                }
                PRINT("\r\n");
                // 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");
            } else {
                if (crc & (1<<0)) {
                    PRINT("crc error\n");
                }

                if (crc & (1<<1)) {
                    PRINT("match type error\n");
                }
            }
#if(!RF_AUTO_MODE_EXAM)
            tmos_set_event(taskID, SBP_RF_RF_RX_EVT);
#endif
            break;
        }

四.功能演示

1.发送

使用BLE调试助手进行搜索,搜索到对应MAC地址和蓝牙名称的广播设备:

a5c0dcf685e506bd16beae1fbd72c3e3

2.接收

adv_len:12,rssi:-63
mac_addr:ff 2c 70 5e 40 e2 
adv_data:b 16 ee fd 5 3 0 6 3 b5 ff 20 

 

posted on 2026-08-31 16:21  WCH蓝牙应用分享  阅读(9)  评论(0)    收藏  举报