尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CH5xx RF_PHY_HOP 例程讲解

CH5xx RF_PHY_HOP 例程讲解
📅 发布时间:2026/6/17 19:25:20
CH5xx RF_PHY_HOP 例程讲解

在EVT的BLE目录下提供了 RF_PHY_HOP 例程,下面来讲述下该例程的运行逻辑:

一.进行RF相关配置的初始化:

void RF_Init(void)
{uint8_t    state;rfConfig_t rfConfig;tmos_memset(&rfConfig, 0, sizeof(rfConfig_t));             // 将 rfConfig 数据清 0taskID = TMOS_ProcessEventRegister(RF_ProcessEvent);//例程默认的接入地址是一个公共的测试地址,使用此地址可能会出现 CRC 错误较多,建议修改接入地址,如0x71764129修改为0x71764124rfConfig.accessAddress = 0x71764129;                       // 禁止使用0x55555555 以及 0xAAAAAAAA ( 建议不超过24次位反转,且不超过连续的6个0或1 )rfConfig.CRCInit = 0x555555;                               // 设置 CRC 初始值rfConfig.Channel = 0;                                      // 默认例程未配置此项,此项为跳频前握手的信道,使用别的信道可以自行配置rfConfig.ChannelMap = 0xFFFFFFFF;                          // 设置跳频信道rfConfig.LLEMode = LLE_MODE_AUTO;                          // 跳频模式必须使用 Auto 模式否则无法通通讯rfConfig.rfStatusCB = RF_2G4StatusCallBack;                // 注册 RF 回调用于获取 RF 状态rfConfig.RxMaxlen = 251;                                   // 设置接收数据最大长度
#if (CLK_OSC32K != 0)                                          // 如果使用的是内部低频,建议将心跳间隔设置小一点,如4//It is better to choose a shorter heartbeat interval for the internal clock.rfConfig.HeartPeriod = 4;
#endifstate = RF_Config(&rfConfig);PRINT("rf 2.4g init: %x\n", state);                        // RF初始化结果,0为成功
//    { // RX mode                                         
//        PRINT("RX mode...\n");
//        tmos_set_event(taskID, SBP_RF_CHANNEL_HOP_RX_EVT);   // 设置 RF 状态为接收,开启接收(执行此任务是还未跳频,只是在握手阶段)
//    }RF_Wait_Rx_End();{ // TX modePRINT("TX mode...\n");                              tmos_set_event(taskID, SBP_RF_CHANNEL_HOP_TX_EVT);     //设置 RF 状态为发送,开启发送(执行此任务是还未跳频,只是在握手阶段)}
}

 二.发送端握手阶段

    // 开启发送握手包if(events & SBP_RF_CHANNEL_HOP_TX_EVT){PRINT("\n------------- hop tx...\n");if(RF_FrequencyHoppingTx(16))                                         //发送握手包,一次发送16包{tmos_start_task(taskID, SBP_RF_CHANNEL_HOP_TX_EVT, 100);          //握手失败,62.5ms后再次发送握手包}else{tmos_start_task(taskID, SBP_RF_PERIODIC_EVT, 1000);               //握手成功,625ms后开始跳频发送}return events ^ SBP_RF_CHANNEL_HOP_TX_EVT;}

三.接收握手包阶段

    // 开启接收握手包if(events & SBP_RF_CHANNEL_HOP_RX_EVT){PRINT("hop rx...\n");if(RF_FrequencyHoppingRx(200))                                    //开始接收握手包,200ms超时{tmos_start_task(taskID, SBP_RF_CHANNEL_HOP_RX_EVT, 400);      //未收到握手包,250ms后再次开启接收}else{rx_end_flag = FALSE;RF_Rx(TX_DATA, 10, 0xFF, 0xFF);                               //握手成功,开启 RF 跳频接收}return events ^ SBP_RF_CHANNEL_HOP_RX_EVT;}

 四.发送端发送数据填充

    if(events & SBP_RF_PERIODIC_EVT){RF_Shut();                                            //调用模式前先 SHUTTX_DATA[0]--;                                         //将发送数据的首字节-1tx_end_flag = FALSE;if(!RF_Tx(TX_DATA, 10, 0xFF, 0xFF))                   //发送10字节数据{RF_Wait_Tx_End();}tmos_start_task(taskID, SBP_RF_PERIODIC_EVT, 1000);   //625ms后再次发送return events ^ SBP_RF_PERIODIC_EVT;}

五.接收端 ack 数据填充

    if(events & SBP_RF_RF_RX_EVT){uint8_t state;RF_Shut();                                        //在调用模式前先 SHUTTX_DATA[0]++;                                     //将回复的ack数据首字节+1rx_end_flag = FALSE;state = RF_Rx(TX_DATA, 10, 0xFF, 0xFF);           //配置成接收状态并填充回复的ack数据return events ^ SBP_RF_RF_RX_EVT;}

六.回调函数获取数据

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:                                          //发送失败{tx_end_flag = TRUE;break;}case TX_MODE_RX_DATA:                                          //发送端收到ack数据{tx_end_flag = TRUE;if (crc == 0) {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");} else {if (crc & (1<<0)) {PRINT("crc error\n");}if (crc & (1<<1)) {PRINT("match type error\n");}}break;}case TX_MODE_RX_TIMEOUT: // Timeout is about 200us               //发送端接收超时{tx_end_flag = TRUE;break;}case TX_MODE_HOP_SHUT:                                           //发送端 HOP 跳频断开{tx_end_flag = TRUE;PRINT("TX_MODE_HOP_SHUT...\n");tmos_set_event(taskID, SBP_RF_CHANNEL_HOP_TX_EVT);           //重新开始发送握手包break;}case RX_MODE_RX_DATA:                                            //接收端接收的数据{if (crc == 0) {uint8_t i;RF_Wait_Rx_End();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");}}tmos_set_event(taskID, SBP_RF_RF_RX_EVT);                     //接收到数据后再次开启接收break;}case RX_MODE_TX_FINISH:                                           //接收端回复ack结束{rx_end_flag = TRUE;break;}case RX_MODE_TX_FAIL:                                             //接收端回复ack失败{rx_end_flag = TRUE;break;}case RX_MODE_HOP_SHUT:                                            //接收端 HOP 跳频断开{PRINT("RX_MODE_HOP_SHUT...\n");rx_end_flag = TRUE;tmos_set_event(taskID, SBP_RF_CHANNEL_HOP_RX_EVT);            //开启接收握手包break;}}
}

七.开发注意点:

1.RF跳频例程和蓝牙主从通信类似,默认是开启配对绑定的,如A和B建立跳频通信后会存在对方的mac地址,此时若有另一对C和D是不可以和A和B之间通信的,将配对绑定信息删除后可以进行通信,只要有一方没有配对绑定信息即可。

若不想配对绑定可以通过此宏配置:#ifndef BLE_SNV
#define BLE_SNV                             TRUE   //TRUE开启,FALSE关闭
#endif

删除配对绑定接口:RF_BondingErase();

相关新闻

  • 2025年中山市专业办公楼装修公司可靠性评测报告 - 优质品牌商家
  • 博客标题优化:提高TensorFlow文章点击率的10个模板
  • 主构造函数到底多强大,C#开发者为何都在悄悄使用?

最新新闻

  • 家属被刑拘需要律师事务所:紧急应对流程与机构甄选 - 品牌2026
  • M2.7深度解析:从被动执行到工作流自主演化的AI新范式
  • 华东门窗品牌排行:5家深耕区域的实力品牌盘点 - 起跑123
  • 2026温州婚纱礼服馆推荐:不同需求对应优质门店整理 - 江湖评测
  • 东莞出手二手名表避坑指南,2026本地老牌二奢实体店报价公道不恶意压价 - 名奢变现站
  • 5分钟搞定Chromedriver:Selenium自动化测试环境配置与版本冲突解决

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号