串口透传之无线_第1页
串口透传之无线_第2页
串口透传之无线_第3页
串口透传之无线_第4页
串口透传之无线_第5页
已阅读5页,还剩16页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SerialApp硬件:PC 仿真 P0_2、P0_3:P0_2RX,P0_3TX.USART0USART1UARTSPIUSART功能,可以设置在单独的I/O引脚。更详细的说明请参考参见16.1节。CC2530SerialApp硬件:PC 仿真 P0_2、P0_3P0_2RX,P0_3TX.USART0USART1UARTSPIUSART功能,可以设置在单独的I/O引脚。更详细的说明请参考参见16.1节。实验相关寄存器与通讯模型由于协议栈已封装好,大家直接配置参考即可心来看程序、实验。下面就介绍实验重要部分,我想是该留出一点空间让大家自己去发挥一下了。传\Projects\zstack\Utilities\SerialApp\CC2530DB\SerialApp.eww工程。cId_tSerialApp_ClusterList[SERIALAPP_MAX_CLUSTERS]={#define voidSerialApp_Init(uint8task_id{halUARTCfg_t SerialApp_TaskID SerialApp_RxSeq=0xC3; SampleApp_NwkState=DEV_INIT;我想大家学到这里应该可以独立看工程了,如果只是看我们的介绍,是很难有突破的,必须静挥一下了。 constcId_tSerialApp_ClusterList[SERIALAPP_MAX_CLUSTERS]={#define voidSerialApp_Init(uint8task_id{halUARTCfg_t SerialApp_TaskID SerialApp_RxSeq=0xC3; SampleApp_NwkState=DEV_INIT;afRegister((endPointDesc_t*)&SerialApp_epDescRegisterForKeys(afRegister((endPointDesc_t*)&SerialApp_epDescRegisterForKeys()driveruartC=SuartC=FuartConfig.flowControlThresholdSERIAL_APP_THRESH;uartConfig.rx.maxBufSize=SERIAL_APP_RX_SZ;//2x30don'tcare-seeuartuartConfig.tx.maxBufSize=SERIAL_APP_TX_SZ;//2x30don'tcare-seeuartuartConfig.idleTimeout =SERIAL_APP_IDLE;//2x30don'tcare-seeuartuartCEnable =TRUE; //2x30don'tcare-seeuartuartConfig.callBackFunc SerialApp_CallBack;HalUARTOpen(SERIAL_APP_PORT,&uartConfig);//打开串口#ifdefined(LCD_SUPPORTEDHalLcdWriteString("SerialApp",HAL_LCD_LINE_2);ZDO_RegisterForZDOMsg(SerialApp_TaskID,Match_Desc_rsp); }UINT16SerialApp_ProcessEvent(uint8task_id,UINT16events{(void //Intentionallyunreferencedpaif(events&SYS_EVENT_MSG{afIncomingMSGPacket_t*MSuartConfig.tx.maxBufSize=SERIAL_APP_TX_SZ;//2x30don'tcare-seeuartuartConfig.idleTimeout =SERIAL_APP_IDLE;//2x30don'tcare-seeuartuartCEnable =TRUE; //2x30don'tcare-seeuartuartConfig.callBackFunc SerialApp_CallBack;//接收回调函数HalUARTOpen(SERIAL_APP_PORT,&uartConfig);//打开串口#ifdefined(LCD_SUPPORTEDHalLcdWriteString("SerialApp",HAL_LCD_LINE_2);ZDO_RegisterForZDOMsg(SerialApp_TaskID,Match_Desc_rsp); }UINT16SerialApp_ProcessEvent(uint8task_id,UINT16events{(void //Intentionallyunreferencedpaif(events&SYS_EVENT_MSG{afIncomingMSGPacket_t*MS *)osal_msg_receive(*)osal_msg_receive(SerialApp_TaskID)){switch(MSGpkt->hdr.event{caseSerialApp_ProcessMSGCmd(MSGpktcaseSampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if((SampleApp_NwkState==DEV_ZB_COORD)||(SampleApp_NwkState==||(SampleApp_NwkState==DEV_END_DEVICE){//Startsendingtheperiodicmessageinaregularinterval.HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);if(SampleApp_NwkState!=DEV_ZB_COORD)SerialApp_DeviceConnect();}e{//Deviceisnolongerinthe}default:}osal_msg_deallocate((uint8*)MSGpkt}return(events^SYS_EVENT_MSG}caseSampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if((SampleApp_NwkState==DEV_ZB_COORD)||(SampleApp_NwkState==||(SampleApp_NwkState==DEV_END_DEVICE){//Startsendingtheperiodicmessageinaregularinterval.HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);if(SampleApp_NwkState!=DEV_ZB_COORD)SerialApp_DeviceConnect();}e{//Deviceisnolongerinthe}default:}osal_msg_deallocate((uint8*)MSGpkt}return(events^SYS_EVENT_MSG}if(eventsif(events&SERIALAPP_SEND_EVT{Seriareturn(events^SERIALAPP_SEND_EVT}if(events&SERIALAPP_RESP_EVT{Seri return(events^SERIALAPP_RESP_EVT}return(0 //Discardunknown}SerialApp_SendstaticvoidSerialApp_Send({#ifSERIAL_APP_LOOPBACK if(SerialApp_TxLenSERI{SerialApp_TxLen+=HalUARTRead(SERIAL_APP_PORT,SerialApp_TxBuf+SerialApp_TxLen+1,}if({(voi{SerialApp_TxLen=}{if(events&SERIALAPP_RESP_EVT{Seri return(events^SERIALAPP_RESP_EVT}return(0 //Discardunknown}SerialApp_SendstaticvoidSerialApp_Send({#ifSERIAL_APP_LOOPBACK if(SerialApp_TxLenSERI{SerialApp_TxLen+=HalUARTRead(SERIAL_APP_PORT,SerialApp_TxBuf+SerialApp_TxLen+1,}if({{SerialApp_TxLen=}{}}SerialApp_TxLen0SerialApp_TxLen0SerialApp_TxLen0if(!SerialApp_TxLen HalUARTRead(SERIAL_APP_PORT, SERIAL_{//Pre-pendsequencenumbertotheTxmessage.SerialApp_TxBuf[0]=++SerialApp_TxSeq;}if { (afStatus_SUCCESS (endPointDesc_t*)&SerialApSerialApp_TxLen+1,SerialApp_TxBuf,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS)){}}}

osal_set_event(SerialApp_TaskID,SERIALAPP_SEND_EVT//发送失败则重据,voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt{uint8stat;uint8seqnb;uint8switch(pkt->clusterId{Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://Storetheaddressforsendingandosal_memcpy(&SerialApp_RxAddr,&(pkt->srcAddr),sizeof(afAddrType_t));seqnb=pkt->cmd.Data[0];//Keepmessageifnotarepeatif((seqnb>SerialApp_RxSeq)|| //Normal((seqnb<0x80)&&(SerialApp_RxSeq>0x80)))//Wrap-around{TransmitthedataontheserialportPC HalUARTWrite( SERIAL_APP_PORT, (pkt->cmd.DataLength-1)){//SavefornextincomingmessageSerialApp_RxSeq=seqnb;stat=}e{stat=}}els{stat=}}}if(!SerialApp_TxLen HalUARTRead(SERIAL_APP_PORT, {//Pre-pendsequencenumbertotheTxmessage.SerialApp_TxBuf[0]=++SerialApp_TxSeq;}if { (afStatus_SUCCESS (endPointDesc_t*)&SerialApSerialApp_TxLen+1,SerialApp_TxBuf,&SerialApp_MsgID,0,AF_DEFAULT_RADIUS)){}}}

进行数据重发。上次数据没有发完的话,即使串口有了新数据也不重新读取串口里的新数据,而是//SelectapproproiateOTAflow-control//Build&sendOTAresponseSerialApp_RspBuf[0]=stat;SerialApp_RspBuf[1]=seqnSerialApp_RspBuf[2]=LO_UINT16(delay);SerialApp_RspBuf[3]=HI_UINT16(delayosal_set_event(SerialApp_TaskID,SERIALAPP_RESP_EVT);osal_stop_timerEx(SerialApp_TaskID,SERIALAPP_RESP_EVT);break;caseif((pkt->cmd.Data[1]==SerialApp_TxSeq)((pkt->cmd.Data[0]==OTA_SUCCESS)||(pkt->cmd.Data[0]==OT{SerialApp_TxLen=osal_stop_timerEx(SerialApp_TaskID,SERIALAPP_}els{//Re-starttimeoutaccordingtodelaysentfromotherdevice.delay=BUILD_UINT16(pkt->cmd.Data[2],pkt->cmd.Data[3]);osal_start_timerEx(SerialApp_TaskID,SERIALAPP_SEND_EVT,delay}breakcaseSERIALAPP_CONNECTREQ_caseSERIALAPP_CONNECTRSP_voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt{uint8stat;uint8seqnb;uint8switch(pkt->clusterId{Amessagewithaserialdatablocktobetransmittedontheserialport.caseSERIALAPP_CLUSTERID1://收到发送过来的数据通过串口输出到电脑显示//Storetheaddressforsendingandseqnb=pkt->cmd.Data[0];//Keepmessageifnotarepeatif((seqnb>SerialApp_RxSeq)|| //Normal((seqnb<0x80)&&(SerialApp_RxSeq>0x80)))//Wrap-{TransmitthedataontheserialportPC HalUARTWrite( SERIAL_APP_PORT, (pkt->cmd.DataLength-1)){//SavefornextincomingmessageSerialApp_RxSeq=seqnb;stat=}e{stat=}}els{defabre}}分别编译下载到协调器、终端,两个节点用USB与电脑相连,打开sscom32软件设串口为:1152008N1stat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论