Zigbee第三天——点对点通信 zigbee点对点通信原理

搞了整整一天,参考了很多大侠的学习记录,才完成这个点对点通信实验,结果却是因为我串口TXRX接错引脚了,所以串口才一直没有显示,还是自己太马虎,下面记录下我的学习过程:

1、实验设备:
CC2430模块两块,一个做RX模块,一个做TX模块

2、实现功能:

TX模块向RX模块发送固定字符串“HelloWorld”,RX模块与PC机串口相连,收到数据后,送到PC机上显示。

3、实验中有关射频收发的重要函数:

1)射频初始化函数
BOOL sppInit(UINT32 frequency, BYTE address)

功能描述:初始化简单的数据包装协议Simple Packet Protocol (SPP),从 DMA 管理器申请两个 DMA通道,用于分别从 Rx FIFO 和 Tx FIFO 传输数据。定时器4管理器同样被设置,这个单元用于在数据包发送后接收器在一定时间内没有返回应答时产生中断。无线部分配置为发送,工作在特定的频率,在发送时自动计算和插入和检查CRC值。
参数描述:
UINT32 frequency:RF 的频率(kHz.);
BYTE address:节点地址
返回:配置成功返回TRUE,失败返回FALSE

2)发送数据包函数
BYTE sppSend(SPP_TX_STRUCT* pPacketPointer)
功能描述:发送length 字节的数据(最多122),标志,目的地址,源地址在Tx DMA 通道传送有效载荷到Tx FIFO前插入,如果期望应当,设置相应的标志。
参数:SPP_TX_STRUCT*pPacketPointer:发送数据包头指针
返回:发送成功返回TRUE,失败返回FALSE。
3)接收数据函数
void sppReceive(SPP_RX_STRUCT *pReceiveData)
功能描述:这个函数使能接收128 字节,包括头和尾。接收数据通过DMA 传输到pReceiveData。DMA装备同时接收开启。接收数据将触发DMA,当所有的数据包接收并且移走,DMA产生一个中断同时运行以前定义的函数rxCallBack。
参数:SPP_TX_STRUCT* pPacketPointer:接收数据包头指针
返回:无
4)射频初始化应用函数
void initRfTest(void)
{

UINT32 frequency =2405000;
INIT_GLED();
INIT_YLED();
radioInit(frequency, myAddr);
}

这个函数实际上还是通过radioInit(frequency,myAddr调用了sppInit(frequency,localAddress)初始化了射频。

5)发送状态函数
void contionuousMode(void)
{
BOOL res;
BYTE sendBuffer[] = "HelloWorld";//要发送的固定字符串
while(1)
{
GLED = LED_OFF;
YLED = LED_ON;
res = radioSend(sendBuffer, sizeof(sendBuffer), remoteAddr,DO_NOT_ACK );

//在radioSend函数中调用了sppSend函数

halWait(200);
YLED = LED_OFF;
halWait(200 );
if(res == TRUE)
{
GLED = LED_ON;
halWait(200);
}
else
{
GLED = LED_OFF;
halWait(200);
}
}

}
6)接收数据状态函数

void receiveMode(void)
{
BYTE* receiveBuffer;
BYTE length;
BYTE res;
BYTE sender;
while(1)
{
YLED =LED_ON;
res = radioReceive(&receiveBuffer,&length, RECEIVE_TIMEOUT,&sender);

//在radioReceive函数中调用了sppReceive函数

YLED =LED_OFF;

if(res ==TRUE)//res为是否收到数据包状态字
{
GLED =LED_ON;
halWait(200);
UartTX_Send_String(receiveBuffer,length);//实现PC机串口显示

}
else
{
Zigbee第三天——点对点通信 zigbee点对点通信原理
GLED = LED_OFF;
halWait(200);
}
GLED = LED_OFF;
}
}

4、实现RX模块与串口通信需要添加修改的几个函数

串口初始化函数

void initUART(void)
{
// Setup for UART0
IO_PER_LOC_UART0_AT_PORT0_PIN2345();

SET_MAIN_CLOCK_SOURCE(CRYSTAL);

UART_SETUP(0, 57600,HIGH_STOP);

UTX0IF =0;//UART0 TX中断标志初始置位0 TX
}

串口发送函数

void UartTX_Send_String(BYTE *Data,int len)
{
int j;
for(j=0;j
{
U0DBUF =*Data++;
while(UTX0IF== 0);
UTX0IF =0;
}
}

详细解释参考阿元大侠的http://blog.sina.com.cn/s/blog_4c82872301008zyp.html

5、烧写64位物理地址

刚开始不知道为啥还要烧写位物理地址,也不知道该怎么填写自己设备的物理地址,后来看了程序代码中有这么一段:

void rf_test_main(void)

{

INT_GLOBAL_ENABLE(INT_ON);
#ifdef RX
{
myAddr =ADDRESS_0;//0x01接收模块地址0x01
remoteAddr =ADDRESS_1;//0x02远程模块地址0x02
initRfTest();//射频初始化应用函数
receiveMode();//接收状态函数
}
#else
{
myAddr =ADDRESS_1;//0x02 发送模块地址0x02
remoteAddr =ADDRESS_0;//0X01远程模块地址0x01
initRfTest();
contionuousMode();//发送状态函数
}
#endif

}

于是按照烧写物理地址的步骤,将RX模块的物理地址写为00 00 00 00 00 00 00 01,将TX模块的物理地址写为00 0000 00 00 00 00 02

6、下载运行后结果


  

爱华网本文地址 » http://www.aihuau.com/a/25101014/232504.html

更多阅读

写于观看《失恋三十三天》后第三天 失恋三十三天小说

吃午饭的时候和几个同事感叹,不知不觉这一年就要过去了。我笑着对她们说:“你们又长大了一岁,而我又老了一岁。”真是这样的,看着她们年轻的,生机勃勃的脸庞,由衷的感叹,想当年自己也曾如此年轻过。岁月催人老,亘古不变的自然规律。偶尔也会

创意 NIKE搏上一切第三弹:TheLastGame终极对决

之前已经为大家介绍过NIKE“搏上一切”系列的前两集,回复“NIKE”可回顾。近期,随着世界杯正式打响,NIKE为大家送上了该系列的第三集“终极对决 The LastGame”。这回理所应当用到了“原班人马”,但制作形式却用了一部5分钟的动画短片

第三天:上雨崩村——下雨崩村——神瀑——下雨崩村

打牌到十二点,李丽和jason算牌高手,我和琼属于不愿算牌的,老菜心不太会玩,结果我和老菜心输惨了~夜里很安静,也许是累了的缘故,所以倒床上就睡着了~舒舒服服的睡了一个大头觉,大清早,醒来就听到屋外滴~滴~滴~的雨声~打开窗户~云雾缭绕的世界

广州长隆亲子游:第三天,广州鳄鱼公园,休闲好去处!

(原本这篇博文是昨天要写的,结果陪皓宝睡觉,自己也睡着了。白天公司楼上在装修,敲击声太大,头都震懵了,一整天心都闷闷的,不舒服,回到家只想倒头就睡)由于第三天只是安排去一个广州鳄鱼公园,而且那边开园也是09:30,所以完全不用着急,孩子们前一

声明:《Zigbee第三天——点对点通信 zigbee点对点通信原理》为网友专属天使分享!如侵犯到您的合法权益请联系我们删除