首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]zigbee星型网络end device与 end device之间可以数据收发么?

[求助]zigbee星型网络end device与 end device之间可以数据收发么?

 


如果星型网络中所有设备定义为FFD.End device能否通过协调器转发数据到另外一个End device或者接受来自其他End device的数据.


如果能如何实现呢?

顶起
应该是可以的,星型网络只是两个device之间不能直接通信,但是通过coordinator转发是可以的
斑竹大人好热心.每问必答,十分感谢
再请教一下:
还是之前那个starnetworkapp.mpc的demo,协调器连接到PC,是从PC的超级终端发送字符串到作为协调器的扳子的MCU
用codewarrior来debug看到SCI_Rxbuf 收不到信息
附Uart.c和Uart.h,谢谢
好像这个程序里面,用的是SCI2的接口。你的板子上是不是有两个串口,程序默认用的是2口
我是USB接口虚拟串口的
USB转的应该没有问题。
我没有板子不能试验你的程序,你再确认一下自己的USB转串口可以正常使用,另外13213板是接的第二个串口,可以看原理图确认
哦 好的 谢谢斑竹
我还想问一下。就是那个keyboard那里还不太明白。看demo是在终端按下一个键。发送一个predefined message.按四个键都是一样的没有区分,如果要四个键进行不同的控制具体该怎么做?
按键共享一个中断向量,可以看PWRLib_KBI_ISR()函数,有按键产生时就退出stop模式,所以不管是按下哪个键都动作。

如果要区分4个按键,你可以修改这个中断函数,在函数中判断哪个键按下了,然后做相应的处理。
确认串口可以使用, 比如在程序中预定义的字符串都能输出的.但是接收字符始终没搞定.
SCI interrupt routine for transmission和SCI interrupt routine for receiving分别如下,确实是用了SCI2(这个是在Tagert里面对板子定义的)。
从 Uart.c看到 SCIXC2 = 0x2C; // TIE = 0, RIE = 1, TE = 1, RE= 1, 0, 0//
接收数据是用中断形式,RFRD=1就读取数据。
但是实验的时候就是串口能够实现单向通讯。接收始终有问题。SCI_RxBuf一直是空的。

interrupt void SCIX_tx_ISR(void)
{
uint8_t dummy;

if (SCI_HeadTxBuf == SCI_TailTxBuf)
{
SCIXC2 &= ~0x80; // Disable transmit interrupt
}
else
{
dummy = SCIXS1; //allow next write to TX register

SCIXD = SCI_TxBuf[SCI_TailTxBuf];
SCI_TailTxBuf = (SCI_TailTxBuf+1) & (TXBUFFERLEN-1);
}
}

/************************************************************************************
* Function: SCIX_rx_int
*
* Description: SCI interrupt routine for receiving.
*
* Return value:
* None
************************************************************************************/
interrupt void SCIX_rx_ISR(void)
{
uint8_t dummy;
// Receive register full and no errors ?
if ( (SCIXS1 & 0x20) != 0x0 ) {
// SCIS1:5 (RDRF) = 0: Data register empty, 1: full. SCIS1:0-4 Error flags
SCI_RxBuf[SCI_HeadRxBuf] = SCIXD; // Read the data

// Verify if we have a whole message
noCharacters++;
if((MESSAGE_LENGTH == noCharacters) || (MESSAGE_MARK == SCI_RxBuf[SCI_HeadRxBuf])) {
noCharacters = 0;
UartMessage++;
}

// Increment the pointer in receive buffer
SCI_HeadRxBuf = (SCI_HeadRxBuf+1) & (RXBUFFERLEN-1);
}
else
{
dummy = SCIXD; // Dummy read because the error flags are only cleared when the data register is read
}
}
串口通讯程序看起来没有问题。你在接收中断里面设置断点,看看串口有数据过来有没有中断产生。理论上说,这个demo程序在demo板上跑应该没有问题的。

你的程序有改动吗? 板子是自己做的还是freescale的?
扳子是飞思卡尔开发版 与串口相关的程序是没动过
这就比较奇怪了。和freescale的支持联系一下看看
返回列表