tingpan

生命不息,折腾不止!
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

串口透传

Posted on 2014-10-30 21:57  tingpan  阅读(3223)  评论(1)    收藏  举报

串口透传

一、 串口能打印出“hello world”

1、串口初始化

在初始化函数中加入:

MT_UartInit();

更改流控:

#define MT_UART_DEFAULT_OVERFLOW FALSE

编译选项:

clip_image001

2、 登记任务号

MT_UartRegisterTaskID(task_id);//登记任务号

3、串口发送:

HalUARTWrite(0,”Hello World\n”,12); //(串口0,‘字符’,字符个数。)

4、加入头文件:

#include “MT_UART.h”

 

二、 无线传输

1、

我们打开SampleApp.C文件,搜索找到函数:

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

在case SAMPLEAPP_PERIODIC_CLUSTERID:下面加入

HalUARTWrite(0,”I get data\n”,11);

2、

分别下载到协调器和终端;

如果协调器收不到数据,可以重启一下终端。

3、接收函数更改如下:

//HalUARTWrite(0,"I get data\n",11); 
HalUARTWrite(0, &pkt->cmd.Data[0],pkt->cmd.DataLength); //打印收到数据
HalUARTWrite(0,"\n",1); // 回车换行

3、 发送函数更改如下:

void SampleApp_SendPeriodicMessage( void )
{
uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'}; 
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,
10,//1,
data,//(uint8*)&SampleAppPeriodicCounter,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}

4、再次下载

 

三、 串口透传

1、 添加串口有数据过来事件:

switch ( MSGpkt->hdr.event )
{
case CMD_SERIAL_MSG: //串口收到数据后由MT_UART层传递过来的
//数据,用网蜂方法接收,编译时不定义MT
//相关内容
SampleApp_SerialCMD((mtOSALSerialData_t *)MSGpkt); 
break;

2、 添加事件处理函数:

void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg) 
{ 
uint8 i,len,*str=NULL; //len有用数据长度
str=cmdMsg->msg; //指向数据开头
len=*str; //msg里的第1个字节代表后面的数据长度
/********打印出串口接收到的数据,用于提示*********/ 
for(i=1;i<=len;i++) 
HalUARTWrite(0,str+i,1 );
HalUARTWrite(0,"\n",1 );//换行
//HalUARTWrite(0,str+1,len); 
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, 
SAMPLEAPP_COM_CLUSTERID,//自己定义一个
len+1, // 数据长度
str, //数据内容
&SampleApp_TransID,
AF_DISCV_ROUTE, 
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) 
{ 
} 
else 
{ 
// Error occurred in request to send. 
}
}

3、SAMPLEAPP_COM_CLUSTERID定义如下:

clip_image002

3、 添加头文件:

#include "MT.h"

4、 声明:

void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg);

5、 串口通过无线的方式发数据过来:

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
uint8 i,len; 
switch ( pkt->clusterId )
{ 
case SAMPLEAPP_COM_CLUSTERID: //如果是串口透传的信息
len=pkt->cmd.Data[0]; 
for(i=0;i<len;i++) 
HalUARTWrite(0,&pkt->cmd.Data[i+1],1);//发给PC机
HalUARTWrite(0,"\n",1); // 回车换行
break;
/*case SAMPLEAPP_PERIODIC_CLUSTERID:
//HalUARTWrite(0,"I get data\n",11); 
HalUARTWrite(0, &pkt->cmd.Data[0],pkt->cmd.DataLength); //打印收到数据
HalUARTWrite(0,"\n",1); // 回车换行
break;
case SAMPLEAPP_FLASH_CLUSTERID:
flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
break;*/
}
}