3264
- 收藏
- 点赞
- 分享
- 举报
(赏面吃)问题过于神奇,欢迎大神进来围观
ZigBee问题:
一、问题背景:
1、Z-stack,SAMPLE工程;
2、一个协调器,一个终端设备;
3、协调器、终端设备均与STM32连接,与协调器连接的以下称为MCU1,另一个称为MCU2;(模仿无线透传传输)
4、欲实现目的:
①MCU2有数据及时通过UART传至终端设备,然后终端设备向协调器点对点发送数据,显示屏显示收到的数据;
②MCU1有数据及时通过UART传至协调器,然后协调器向终端设备广播数据,显示屏显示收到的数据。
二、出现的问题:
协调器能够收到终端设备点对点发来的数据,终端设备收不到协调器广播来的数据。
三、预解决:
1、Packet Sniffer抓包分析:
①终端设备向协调器点对点发送数据数据包情况:
描述:1、终端设备请求一次数据,协调器应答一下,然后终端设备点对点发送,协调器应答;
2、协调器能够收到终端设备的数据;
②协调器广播数据数据包情况:
发现的问题:1、终端设备向协调器请求一次数据,协调器有时发送一个数据包,有时发送两个数据包(PS:这个数据包是期望发送的数据包);
2、协调器发送数据包后,终端设备没有应答;
3、终端设备收不到协调器广播来的数据。
2、ZigBee、MCU角色互换,问题仍得不到解决!
四、主要程序附件:
1、事件处理函数如下:
[code]uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
{
afIncomingMSGPacket_t *MSGpkt;
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG )//事件提取
{
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{
case CMD_SERIAL_MSG:/*串口收到数据*/
SampleApp_MyFunction_SendMessage((mtOSALSerialData_t *)MSGpkt);/*路由到空中*/
break;
// Received when a messages is received (OTA) for this endpoint
case AF_INCOMING_MSG_CMD:/*天线收到数据*/
SampleApp_MessageMSGCB( MSGpkt );/*传送至PC端或MCU*/
break;
default:
break;
}
// Release the memory
osal_msg_deallocate( (uint8 *)MSGpkt );
// Next - if one is available
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
}
// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}
// Discard unknown events
return 0;
}[/code]
2、无线数据接收函数:
[code]void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接收无线数据
{
switch ( pkt->clusterId )
{
#if defined (MCU)
case SAMPLEAPP_MYCLUSTERID_P2P_SendMessage:
HalUARTWrite ( //uint8 port
0,
//uint8 *pBuffer
pkt->cmd.Data,
//uint16 length
pkt->cmd.DataLength
);
break;
#elif defined (SLAVE)
case SAMPLEAPP_MYCLUSTERID_Broadcast_SendMessage:
HalUARTWrite ( //uint8 port
0,
//uint8 *pBuffer
pkt->cmd.Data,
//uint16 length
pkt->cmd.DataLength
);
break;
#endif
}
}[/code]
3、串口数据发送函数:
[code]void SampleApp_MyFunction_SendMessage( mtOSALSerialData_t *cmdMsg )
{
#if defined (PC)/*MCU对SLAVE广播*/
if ( AF_DataRequest( &SampleApp_Broadcast_DstAddr, &SampleApp_epDesc,
//A valid cluster ID as specified by the Profile
SAMPLEAPP_MYCLUSTERID_Broadcast_SendMessage,
//Number of bytes of data pointed to by next param
*cmdMsg->msg,//取出头字节
//A pointer to the data bytes to send
cmdMsg->msg+1, //指向发送的数据
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
#elif defined (SLAVE)/*SLAVE对MCU点播数据*/
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
//A valid cluster ID as specified by the Profile
SAMPLEAPP_MYCLUSTERID_P2P_SendMessage,
//Number of bytes of data pointed to by next param
*cmdMsg->msg,//取出头字节
//A pointer to the data bytes to send
cmdMsg->msg+1, //指向发送的数据
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
#endif
else
{
// Error occurred in request to send.
}
}[/code]
新人小白,若有问的不妥的地方,还请大家多多包涵,也恳请大家帮忙查找问题,谢谢大家!
一、问题背景:
1、Z-stack,SAMPLE工程;
2、一个协调器,一个终端设备;
3、协调器、终端设备均与STM32连接,与协调器连接的以下称为MCU1,另一个称为MCU2;(模仿无线透传传输)
4、欲实现目的:
①MCU2有数据及时通过UART传至终端设备,然后终端设备向协调器点对点发送数据,显示屏显示收到的数据;
②MCU1有数据及时通过UART传至协调器,然后协调器向终端设备广播数据,显示屏显示收到的数据。
二、出现的问题:
协调器能够收到终端设备点对点发来的数据,终端设备收不到协调器广播来的数据。
三、预解决:
1、Packet Sniffer抓包分析:
①终端设备向协调器点对点发送数据数据包情况:
描述:1、终端设备请求一次数据,协调器应答一下,然后终端设备点对点发送,协调器应答;
2、协调器能够收到终端设备的数据;
②协调器广播数据数据包情况:
发现的问题:1、终端设备向协调器请求一次数据,协调器有时发送一个数据包,有时发送两个数据包(PS:这个数据包是期望发送的数据包);
2、协调器发送数据包后,终端设备没有应答;
3、终端设备收不到协调器广播来的数据。
2、ZigBee、MCU角色互换,问题仍得不到解决!
四、主要程序附件:
1、事件处理函数如下:
[code]uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
{
afIncomingMSGPacket_t *MSGpkt;
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG )//事件提取
{
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{
case CMD_SERIAL_MSG:/*串口收到数据*/
SampleApp_MyFunction_SendMessage((mtOSALSerialData_t *)MSGpkt);/*路由到空中*/
break;
// Received when a messages is received (OTA) for this endpoint
case AF_INCOMING_MSG_CMD:/*天线收到数据*/
SampleApp_MessageMSGCB( MSGpkt );/*传送至PC端或MCU*/
break;
default:
break;
}
// Release the memory
osal_msg_deallocate( (uint8 *)MSGpkt );
// Next - if one is available
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
}
// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}
// Discard unknown events
return 0;
}[/code]
2、无线数据接收函数:
[code]void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )//接收无线数据
{
switch ( pkt->clusterId )
{
#if defined (MCU)
case SAMPLEAPP_MYCLUSTERID_P2P_SendMessage:
HalUARTWrite ( //uint8 port
0,
//uint8 *pBuffer
pkt->cmd.Data,
//uint16 length
pkt->cmd.DataLength
);
break;
#elif defined (SLAVE)
case SAMPLEAPP_MYCLUSTERID_Broadcast_SendMessage:
HalUARTWrite ( //uint8 port
0,
//uint8 *pBuffer
pkt->cmd.Data,
//uint16 length
pkt->cmd.DataLength
);
break;
#endif
}
}[/code]
3、串口数据发送函数:
[code]void SampleApp_MyFunction_SendMessage( mtOSALSerialData_t *cmdMsg )
{
#if defined (PC)/*MCU对SLAVE广播*/
if ( AF_DataRequest( &SampleApp_Broadcast_DstAddr, &SampleApp_epDesc,
//A valid cluster ID as specified by the Profile
SAMPLEAPP_MYCLUSTERID_Broadcast_SendMessage,
//Number of bytes of data pointed to by next param
*cmdMsg->msg,//取出头字节
//A pointer to the data bytes to send
cmdMsg->msg+1, //指向发送的数据
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
#elif defined (SLAVE)/*SLAVE对MCU点播数据*/
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
//A valid cluster ID as specified by the Profile
SAMPLEAPP_MYCLUSTERID_P2P_SendMessage,
//Number of bytes of data pointed to by next param
*cmdMsg->msg,//取出头字节
//A pointer to the data bytes to send
cmdMsg->msg+1, //指向发送的数据
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
#endif
else
{
// Error occurred in request to send.
}
}[/code]
新人小白,若有问的不妥的地方,还请大家多多包涵,也恳请大家帮忙查找问题,谢谢大家!
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
02020-04-30 18:07:27
-
2015-07-17 19:39:07
-
2016-03-09 15:20:42
-
2022-09-01 16:00:32
-
2017-07-21 10:56:17
-
2016-12-26 22:08:08
-
2024-01-12 10:51:00
-
2017-09-17 10:11:38
-
2017-10-25 13:41:49
-
02017-10-15 15:46:08
-
2015-03-04 11:29:16
-
02017-10-19 07:17:14
-
2010-01-02 08:52:02
-
12018-08-28 21:10:05
-
2014-09-02 00:01:55
-
142014-12-25 17:40:38
-
2017-02-10 16:21:58
-
2021-02-11 14:47:47
-
2021-10-13 11:25:47
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认