电子说
无人机行业的不少客户反馈,第一次接触XBee Pro SX模块时,看着整篇的文档感觉头大,不知从何下手。本文做个总结,以供有需要的朋友借鉴。
Digi公司的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
添加模块:
添加另一个,同理:
3、选择固件及配置传输方式
选择固件:
4、AT指令
①打开串口
②先查询下本机MAC, 注:"0x0D"是ASCII中的回车字符。
③将本机设为**广播模式(即:DH=0,DL=0xFFFF)**,除了用AT指令,也可以在设置界面直接设置。当然,MCU程序里,只能用串口发送AT指令来设置了。
④发送“Hello XBEE”
注意:两个XBee接上天线后距离不宜过近,以防损坏模块,官方推荐2m左右 。
5、用程序控制SX发送数据
①初始化设置目标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; //ATDH “char SRUDH_CMD[14]="ATDH00000000 ";”, 为ASCII里的回车 UART_SendWait(UART1,SRUDH_CMD,sizeof(SRUDH_CMD)); 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; //ATDL UART_SendWait(UART1,SRUDL_CMD,sizeof(SRUDL_CMD)); 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; //ATHP,先导码 UART_SendWait(UART1,HP_CMD,sizeof(HP_CMD)); 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; //ATWR UART_SendWait(UART1,WRCommandf,sizeof(WRCommandf)); 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; //ATCN,每次正确发送都会收到OK UART_SendWait(UART1,SetTimeCommandf,sizeof(SetTimeCommandf)); 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;}
②发送数据
透传模式下,只要把目标地址设定好,就可以直接发送数据: UART_SendWait(UART1,Xbee_Send,10); //将数据发送给XBEE
6、透传模式下的各种AT指令可以详看手册说明。
二、API传输方式
API模式的传输功能非常强大,使用也很方便,建议在学会使用透传模式后,上手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等。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !