PRF 2.4G Long Range Trx¶
1 功能概述¶
本例程演示 PAN271 在 Long Range 模式下的基础 Tx/Rx 通信流程:
Tx 端周期性发送固定长度 Payload
Rx 端持续接收并打印 Payload,同时输出 RSSI
与普通模式示例不同,本例程采用:
BLE 芯片模式:PAN271_CHIPMODE_BLE
Long Range 数据速率:PAN271_DR_1M_S2
帧格式中不嵌入Header
4 Bytes 地址宽度
适合用于验证 PAN271 的BLE模式长距离编码收发能力。
2 例程位置与工程文件¶
发送例程目录:
\01_SDK\samples\proprietary_rf\09_longrange_tx 接收例程目录:
\01_SDK\samples\proprietary_rf\10_longrange_rx 发送 Keil 工程:09_longrange_tx\keil\longrange_tx.uvprojx
接收 Keil 工程:10_longrange_rx\keil\longrange_rx.uvprojx
发送主代码:09_longrange_tx\src\main.c
接收主代码:10_longrange_rx\src\main.c
3 环境准备¶
3.2 硬件接线¶
每套板按以下方式连接:
将核心板插到底板上
串口连接:
PC 通过 USB-TypeC 连接到底板 USB 转串口口
按例程默认 UART0 引脚连接跳线
例程中 UART0 复用为:P0.5 = TX,P0.6 = RX
JLink SWD 连接:
SWD_CLK -> P00
SWD_DAT -> P01
GND -> GND
3.3 PC 软件¶
串口工具:UartAssist、SecureCRT、MobaXterm 等
串口参数:115200, 8N1
4 编译与烧录(Keil)¶
4.1 烧录发送端¶
打开 09_longrange_tx\keil\longrange_tx.uvprojx
选择目标工程 longrange_tx
Build
Download
4.2 烧录接收端¶
打开 10_longrange_rx\keil\longrange_rx.uvprojx
选择目标工程 longrange_rx
Build
Download
说明:工程下载配置使用 SDK 自带 JFlash 与 settings.jflash,Keil 中执行 Download 时会调用对应的烧录流程。
5 使用方法(Tx/Rx 对测)¶
5.1 上电运行¶
给 Tx 板和 Rx 板上电
分别打开两个串口终端
观察发送端与接收端日志
5.2 运行现象¶
Tx 端初始化完成后,循环发送 37 字节 Payload
每次发送前先更新 TxBuf[0],因此首字节会持续递增
发送周期约为 500 ms
Rx 端初始化完成后立即进入接收状态
每收到一包,就打印长度、数据内容和 RSSI
注意:Tx 与 Rx 的射频参数必须完全一致,否则可能出现 crc、pid err 或 len err。
6 关键配置说明(RFConfig_t)¶
发送端和接收端的 RFConfig_t 都定义在各自的 src\main.c 中,关键配置如下:
trx_mode
Tx 工程:PAN271_TX_MODE
Rx 工程:PAN271_RX_MODE
Channel = 2:工作信道,Tx/Rx 必须一致
TxPower = PAN271_TXPWR_11dBm:发射功率
ChipMode = PAN271_CHIPMODE_BLE:BLE 模式
DataRate = PAN271_DR_1M_S2:Long Range S2 编码速率
WorkMode = PAN271_WORKMODE_NORMAL:普通工作模式
EnWhite = ENABLE:使能白化
EnDPL = ENABLE:使能动态包长
EnTxNoAck = ENABLE:不等待 ACK
AddrWidth = PAN271_WIDTH_4BYTES:地址宽度 4 Bytes
TxAddr / RxAddr[0] = 29 41 76 71 00:收发地址必须一致
BLEHeadNum = BLE_LENGTH_ONLY:仅使用长度字段,不使用Header字段
BLEHead0 = 0
BLEHead1 = 0
WhiteInit = PAN271_BLE_WH_INIPHA_CH37:白化初始值
WhiteListMatchMode = PAN271_BLE_WhiteList_DISABLE:关闭白名单匹配
LengthFilterMode = PAN271_BLE_LEN_FILTER_DISABLE:关闭长度过滤
TxLen = 37
RxLen = 37
RxTimeoutUs = 0:不启用接收超时
其中最关键的匹配项为:
Channel
DataRate
AddrWidth
TxAddr / RxAddr[0]
BLEHeadNum / BLEHead0 / BLEHead1
WhiteInit
TxLen / RxLen
7 Payload 内容说明¶
发送端启动后会先调用 FillSequentialData(TxBuf, sizeof(TxBuf)),将发送缓存填充为递增数据:
00 01 02 03 04 05 ...
在主循环中,每次发送前执行:
TxBuf[0]++;
因此实际发送的 37 字节数据具有以下特点:
第 0 字节每次发送都会加 1
第 1 到第 36 字节保持为初始化后的顺序数据
例如第一次接收时,可能看到类似内容:
01 01 02 03 04 05 06 07 ... 24
后续每发一包,第一个字节会继续递增。
8 软件流程说明¶
8.1 发送端流程¶
09_longrange_tx 的主流程如下:
时钟初始化与串口初始化
调用 PAN271_RF_Init(&gRfConfig) 完成 Long Range 射频初始化
调用 FillSequentialData() 填充发送缓存
进入 while(1)
将 TxBuf[0] 加 1
调用 PAN271_RF_SetTxData(TxBuf, gRfConfig.TxLen) 写入发送数据
调用 PAN271_RF_TrxStart() 启动发送
延时 500 ms 后进入下一轮发送
8.2 接收端流程¶
10_longrange_rx 的主流程如下:
时钟初始化与串口初始化
调用 PAN271_RF_Init(&gRfConfig) 完成 Long Range 射频初始化
调用 PAN271_RF_TrxStart() 进入接收状态
在中断回调中读取接收数据、打印 Payload 与 RSSI