串口透传
一、 串口能打印出“hello world”
1、串口初始化
在初始化函数中加入:
MT_UartInit();
更改流控:
#define MT_UART_DEFAULT_OVERFLOW FALSE
编译选项:
2、 登记任务号
MT_UartRegisterTaskID(task_id);//登记任务号
3、串口发送:
HalUARTWrite(0,”Hello World ”,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 ”,11);
2、
分别下载到协调器和终端;
如果协调器收不到数据,可以重启一下终端。
3、接收函数更改如下:
//HalUARTWrite(0,"I get data ",11); HalUARTWrite(0, &pkt->cmd.Data[0],pkt->cmd.DataLength); //打印收到数据 HalUARTWrite(0," ",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," ",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定义如下:
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," ",1); // 回车换行 break; /*case SAMPLEAPP_PERIODIC_CLUSTERID: //HalUARTWrite(0,"I get data ",11); HalUARTWrite(0, &pkt->cmd.Data[0],pkt->cmd.DataLength); //打印收到数据 HalUARTWrite(0," ",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;*/ } }