rf_tx例程¶
1 功能概述¶
rf_tx演示了RF在PAN028b1_evb上发射数据的使用方法,主要包括:
297普通型发射
297增强型发射
24L01普通型发射
24L01增强型发射
2 环境准备¶
Board: PAN028b1_evb两块(另一块烧录接收程序)
Micro USB线 用于供电和查看串口打印Log
硬件接线:
将 J19 开关拔至TX侧,将P3_1与uart的TX引脚相连
3 编译和烧录¶
例程位置:pan2628_dk\01_SDK\example_basic\rf\rf_tx
打开目录下keil下的Tx.uvprojx工程,编译整个代码工程。
4 演示说明¶
PAN028b1_evb发送指定数据,可以通过串口打印出发送的状态,发送端间隔1000ms发送一包数据。
下面对使用XN297L私有XN297L私有2.4G协议进行数据发送时的不同配置示例进行说明。使用24L01私有2.4G协议的示例效果一致,不再额外说明。
4.1 普通工作模式, AckPayload不使能(RF_APL_DISABLE), DynamicPayload不使能(RF_DPL_DISABLE)¶
Tx
端成功发送32字节长度的数据。
Rx
端成功接收到长度为32字节的数据。
4.2 增强工作模式, AckPayload不使能(RF_APL_DISABLE), DynamicPayload不使能(RF_DPL_DISABLE)¶
Tx
端成功发送32字节长度的数据。
Rx
端成功接收到长度为32字节的数据。
4.3 增强工作模式, AckPayload使能(RF_APL_ENABLE), DynamicPayload不使能(RF_DPL_DISABLE)¶
AckPayload
使能后,Rx
端在接收到数据后向Tx
端发送Ack。
"Tx ok"
表示Tx
端发送数据成功,"read ack done[32]"
表示接收到长度为32字节的Ack数据。
Rx
端成功接收到32字节的数据,并且在发送Ack
之前写入了32字节的数据作为Ack
,发送到Tx
。
Rx
与Tx
之间数据发送的流程如下。
由于当前DynamicPayload
不使能,即数据长度固定,因此要求Tx
端的发送缓冲区长度RF_TX_BUF_SIZE
与Rx
端的发送缓冲区长度RF_RX_BUF_SIZE
相等,如果不一致,Rx
端将无法正确接收到Tx
端发送的数据。
4.4 增强工作模式, AckPayload使能(RF_APL_ENABLE), DynamicPayload使能(RF_DPL_ENABLE)¶
Tx端定义
//Tx
#define RF_TX_BUF_SIZE 31
Rx端定义
//Rx
#define RF_RX_BUF_SIZE 32
与上一节内容对比,当DynamicPayload
使能时,允许Tx
端的发送缓冲区长度RF_TX_BUF_SIZE
小于Rx
端的接收缓冲区长度RF_RX_BUF_SIZE
。
可以看到Tx
端发送了31字节的数据,而Rx
端正确接收到了长度为31字节的数据。
5 开发说明¶
设备的物理层以及用户层配置存放在结构体RF_BasisConfig
中,如需修改配置,直接对该结构体修改即可。
xdata RF_Config_t RF_BasisCfg =
{
{33, RF_DR_1Mbps, RF_CRC_2BYTE, RF_TXPWR_10dBm},
{RF_CHIPMODE_XN297, RF_WORKMODE_ENHANCE, RF_APL_ENABLE, RF_DPL_ENABLE, sizeof(RfTxBuf), RfTxBuf, sizeof(RfRxBuf), RfRxBuf, sizeof(RfAddr), RfAddr}
};
使用配置进行初始化
RF_BasisInit(&RF_BasisCfg);
在rf_basis.c
可以找到读写相关函数的定义。
u8 RF_BasisRead(u8 *pBuf, u8 BufLen, u32 Timeout);
bool RF_BasisWrite(u8 *pBuf, u8 BufLen);
回调函数被注册到全局配置中,在读取Ack
之后和发送Ack
之前将调用用户回调函数,可用于对Ack
内容的修改。
void Rf_readAckPkg_CB(void);
void Rf_writeAckPkg_CB(void);
6 RAM/Flash资源使用情况¶
Program Size: data=15.2 xdata=168 const=82 code=7996