微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 求助:ZigBeeCC2530传感器组网采集终端串口接收丢包

求助:ZigBeeCC2530传感器组网采集终端串口接收丢包

时间:10-02 整理:3721RD 点击:
如题,我用两块开发板(一个作为协调器,一个作为终端节点)组网采集位移计信号,可是终端节点和位移计通过485进行通信时丢包严重,一直不知道问题出在哪里。现把我在协议中添加的代码附上,求大神指点,感激不尽!
终端初始化代码:
void GenericApp_Init( byte task_id )
{
halUARTCfg_t uartConfig; //串口

GenericApp_TaskID = task_id;
GenericApp_NwkState=DEV_INIT;
GenericApp_TransID = 0;


GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;
GenericApp_epDesc.task_id = &GenericApp_TaskID;
GenericApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;

GenericApp_epDesc.latencyReq = noLatencyReqs;
afRegister( &GenericApp_epDesc );
// RegisterForKeys( GenericApp_TaskID ); //按钮事件的注册,要响应按钮事件,这个必须添加

uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_9600 ; //波特率设置
uartConfig.flowControl = FALSE;
uartConfig.callBackFunc = rxCB;
HalUARTOpen(0,&uartConfig); //串口初始化
}
终端串口采集代码:

static void rxCB(uint8 port,uint8 event)
{

HalUARTRead(0, &DATA,1);
if(DATA==0xaa)
{
HalUARTRead(0, &DATA,1);
if(DATA==0xaa)
{
SensorData[0]=SensorData[1]=0xaa;
for(uint8 i=2;i<12;i++)
{
HalUARTRead(0, &DATA,1);
SensorData[i]=DATA;
}

rec[0]=SensorData[7];
rec[1]=SensorData[8];
rec[2]=SensorData[9];

}
}
crc_function(SensorData,10,0xFFFF);
sign[0]=crc_L;
sign[1]=crc_H;
}
事件响应代码:
if(events&SEND_DATA_EVENT)
{


if((SensorData[10]==sign[0])&&(SensorData[11]==sign[1]))
{
GenericApp_SendTheMessage(); //发送
}
osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,100); //响应事件
return(events^SEND_DATA_EVENT);
}
注:我的数据格式是一帧12个字节,帧头两个字节是0xaa,最后两个字节是校验!

看看看看看看

多长时间发送一次?你最好自己加一下握手协议防止丢包

10ms发送一次,现象是每一帧有时是对的,有时是全乱的,我感觉就是一帧接收不完就又接收下一帧了

那你可以通过延长发送时间间隔再试一下,这样就可以验证你的猜测了

10ms一次太快了,没有做一些协议肯定丢包

楼主找到解决方法了吗
我也在用zigbee模块,路由发到协调的30字节,发送间隔从几十ms到几百ms,都有丢包现象

485?

串口回调函数改成定时扫描会好很多

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top