实训题目要求
选择2块国赛Zigbee模块或小蜜蜂的XMF09B国赛兼容板,在国赛提供的工程资源中进行基于BasicRF的程序设计,实现基于BasicRF无线点对点通信的串口数据透传,具体要求如下:
<1> 节点A 和节点B 的PANID设置为0x1234,通道号设置为17,节点地址自定义。
<2> 在PC端使用“串口助手”工具,通过串口向节点A发送数据。节点A接收到串口数据后,将该数据通过RF无线发送给节点B。节点B接收到新的无线数据后,将该数据通过串口发送到PC端的另一个“串口助手”工具,并显示出来。
<3> 在PC端使用“串口助手”工具,通过串口向节点B发送数据。节点B接收到串口数据后,将该数据通过RF无线发送给节点A。节点A接收到新的无线数据后,将该数据通过串口发送到PC端的另一个“串口助手”工具,并显示出来。
<4> 串口的波特率使用默认的115200。

参考资料:Zigbee模块XMF09B国赛兼容版资料汇总
参考资料:BasicRF点对点无线通信的应用开发核心要点
参考资料:BasicRf点对点与Z-Stack组网国赛官方提供API函数汇总
HEX烧写文件下载:基于BasicRF的串口收发-节点A
HEX烧写文件下载:基于BasicRF的串口收发-节点B
配置点对点无线通信的基本参数
#define RF_CHANNEL 17 // 频道 11~26
#define PAN_ID 0x1234 //网络id
//节点A的地址信息
#define MY_ADDR 0x000a //本机模块地址
#define SEND_ADDR 0x000b //发送地址
//节点B的地址信息
//#define MY_ADDR 0x000b //本机模块地址
//#define SEND_ADDR 0x000a //发送地址
变量定义与函数声明
unsigned char dat_Recv[32]; //无线数据接收缓存
unsigned char dat_Send[32]; //串口数据发送缓存
unsigned char len = 0; //串口数据接收长度
void Delay(unsigned int t); //普通延时函数
void Recv_UR_Data(); //串口数据接收处理函数
void Recv_RF_Data(); //无线数据接收处理函数
主函数的实现
/********************MAIN************************/
void main(void)
{
halBoardInit();//选手不得在此函数内添加代码
ConfigRf_Init();//选手不得在此函数内添加代码
while(1)
{
/* user code start */
Recv_UR_Data(); //串口数据接收处理
Recv_RF_Data(); //无线数据接收处理
Delay(200);
/* user code end */
}
}
串口数据接收处理函数的实现
void Delay(unsigned int t)
{
while(t--);
}
void Recv_UR_Data()
{
len = halUartRxLen();
if(len != 0)
{
dat_Send[0] = len;
halUartRead(&dat_Send[1], len);
len = 0;
basicRfSendPacket(SEND_ADDR, dat_Send, 32);
}
}
无线数据接收处理函数的实现
void Recv_RF_Data()
{
if(TRUE == basicRfPacketIsReady()) //接收到新的无线数据
{
basicRfReceive(dat_Recv, 32, NULL);
halUartWrite(&dat_Recv[1], dat_Recv[0]);
}
}
特别说明:
利用物联网国赛提供的BasicRF工程资源进行串口数据收发,在系统上电后,你没有进行任何串口数据发送的情况下,PC端会收到一个字节0x00的数据。这是因为国赛提供的资源中,在串口初始化的时候会先发一个0x00的数据给串口。这个问题可以自行修正加以完善。
注:如需完整工程源码,可通过网站下方的“联系我们”中的联系方式,留下邮箱地址,我们会将资料以邮件方式发到该邮箱。