[Digi]XBEE-PRO-SX射频模块快速上手教程
序
第一次接触XBEE射频模块看着整篇的文档让人头大,不知从何下手在学习了该模块后做了总结,写此博客以供有需要的朋友借鉴。XBEE-PRO-SX通讯方式主要分两种,一种是透传方式还有种是AIP方式,透传使用起来比较简单,但API的功能更为强大,那么先用透传试下传输数据。
一、透传模式
1、硬件方面准备:
XBEE-PRO-SX×2、XBEE调试底板×2、天线×2、Micro-USB连接线×2
2、XCTU上位机:
官网链接:https://www.digi.com/products/embedded-systems/digi-xbee/digi-xbee-tools/xctu
官网下载速度太慢准备了百度网盘:https://pan.baidu.com/s/1mvUzbomAurTPdJy5YeaPbQ 提取码:hl9f
添加模块
添加另一个同理
3、选择固件及配置传输方式
选择固件
4、AT指令
①、打开串口
②、先查询下本机MAC, 注."0x0D"是ASCII中的回车字符
③、将本机设为广播模式,除了用AT指令也可以在设置界面直接设置。(程序里只能用串口指令)
④、“Hello XBEE”
注意.两个XBEE接上天线后距离不宜过近,以防损坏模块,官方推荐2m左右。实际我调试也就50cm左右,,,没那么长的USB线啊emmmm…
5、用程序控制XBEE发送数据
①、初始化设置目标MAC地址
unsigned char XBEE_Model_Set(void){
uint8_t date;
while(UART_CheckFlag(UART1, UART_FlagRDRF)) //接收数据寄存器 空 0
date=UART_ReadDataReg(UART1);
UART1->C2 |= UART_C2_TE_MASK; //发送使能
UART_SendWait(UART1,SetCommand,3); //使XBEE进入AT命令模式,里面用字符存的“+++”
UART1->C2 |= UART_C2_RE_MASK; //接收使能
while(!UART_CheckFlag(UART1, UART_FlagRDRF)); //接收到数据
date=UART_ReadDataReg(UART1);
if(date!=0x4f) return 1; //发送完数据后,顺序接收到 0x4f--->0x4B--->0x0D(接收到OK)
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4B) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x0D) return 1;
UART_SendWait(UART1,SRUDH_CMD,sizeof(SRUDH_CMD)); //ATDH “char SRUDH_CMD[14]="ATDH00000000\r";”
// \r为ASCII里的回车
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4f) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4B) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x0D) return 1;
UART_SendWait(UART1,SRUDL_CMD,sizeof(SRUDL_CMD)); //ATDL
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4f) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4B) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x0D) return 1;
UART_SendWait(UART1,HP_CMD,sizeof(HP_CMD)); //ATHP 先导码,详见手册
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4f) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4B) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x0D) return 1;
UART_SendWait(UART1,WRCommandf,sizeof(WRCommandf)); //ATWR
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4f) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4B) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x0D) return 1;
UART_SendWait(UART1,SetTimeCommandf,sizeof(SetTimeCommandf)); //ATCN,每次正确发送都会收到OK
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4f) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x4B) return 1;
while(!UART_CheckFlag(UART1, UART_FlagRDRF));
date=UART_ReadDataReg(UART1);
if(date!=0x0D) return 1;
return 0;
}
②、发送数据
透传下只要把目标mac设定好,就可以直接发送数据
UART_SendWait(UART1,Xbee_Send,10); //将数据发送给XBEE
6、透传下的各种AT指令可以详看手册说明
链接:https://pan.baidu.com/s/1wb2yCmjweDLLAIPbOroUYQ 提取码:adkf
二、API传输方式
1、该传输功能非常强大,使用也很方便,建议在学会使用透传方式后,学习此方式。
两个模块都这样设置
2、API 64位地址 传输协议
协议介绍
3、API方式 “Hello XBEE”
接收端的协议同理
4、用程序发送
不用AT指令设置目标地址,直接把目标地址包含在数组中就行
//1byte 帧 头 +2byte 字 节 长 度 +1byte Frame type+1byte Frame ID+8byte 目标 MAC+1byte options+数据字节8byte+1byte 和校验
uint8_t XBEE_Send_Data[23]={0x7E,0x00,0x13,0x00,0x00,0,0,0,0,0,0,0,0,0x00,0,0,0,0,0,0,0,0,0x00};
//bit5 //bit14
UART_SendWait(UART1,XBEE_Send_Data,23); //将数据发送给XBEE
注.API模式也有AT协议,可以查询本机MAC等…