[求助]zigbee星型网络end device与 end device之间可以数据收发么?
- UID
- 105671
- 性别
- 男
|
[求助]zigbee星型网络end device与 end device之间可以数据收发么?
如果星型网络中所有设备定义为FFD.End device能否通过协调器转发数据到另外一个End device或者接受来自其他End device的数据.
如果能如何实现呢? |
|
|
|
|
|
- UID
- 105671
- 性别
- 男
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
应该是可以的,星型网络只是两个device之间不能直接通信,但是通过coordinator转发是可以的 |
|
|
|
|
|
- UID
- 105671
- 性别
- 男
|
斑竹大人好热心.每问必答,十分感谢
再请教一下:
还是之前那个starnetworkapp.mpc的demo,协调器连接到PC,是从PC的超级终端发送字符串到作为协调器的扳子的MCU
用codewarrior来debug看到SCI_Rxbuf 收不到信息
附Uart.c和Uart.h,谢谢
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
好像这个程序里面,用的是SCI2的接口。你的板子上是不是有两个串口,程序默认用的是2口 |
|
|
|
|
|
- UID
- 105671
- 性别
- 男
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
USB转的应该没有问题。
我没有板子不能试验你的程序,你再确认一下自己的USB转串口可以正常使用,另外13213板是接的第二个串口,可以看原理图确认 |
|
|
|
|
|
- UID
- 105671
- 性别
- 男
|
哦 好的 谢谢斑竹
我还想问一下。就是那个keyboard那里还不太明白。看demo是在终端按下一个键。发送一个predefined message.按四个键都是一样的没有区分,如果要四个键进行不同的控制具体该怎么做? |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
按键共享一个中断向量,可以看PWRLib_KBI_ISR()函数,有按键产生时就退出stop模式,所以不管是按下哪个键都动作。
如果要区分4个按键,你可以修改这个中断函数,在函数中判断哪个键按下了,然后做相应的处理。 |
|
|
|
|
|
- UID
- 105671
- 性别
- 男
|
确认串口可以使用, 比如在程序中预定义的字符串都能输出的.但是接收字符始终没搞定.
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
}
}
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
串口通讯程序看起来没有问题。你在接收中断里面设置断点,看看串口有数据过来有没有中断产生。理论上说,这个demo程序在demo板上跑应该没有问题的。
你的程序有改动吗? 板子是自己做的还是freescale的? |
|
|
|
|
|
- UID
- 105671
- 性别
- 男
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
这就比较奇怪了。和freescale的支持联系一下看看 |
|
|
|
|
|