参考文档:xfzigbee串口透明传输SampleApp例程实验增加一个事件十六进制转字符函数【摘】数据的发送,广播、组播、点对点Z-stack1.4.3-1.2.1SampleAppDB编译选项CoordinatorDBCC2430DBHAL_UARTZDO_COORDINATOREndDeviceDBCC2430DBNWK_AUTO_POLLHAL_UART修改地方hal_board_cfg.h/*SettoTRUEenableUARTusage,FALSEdisableit*/#ifndefHAL_UART#if(definedZAPP_P1)||(definedZAPP_P2)||(definedZTOOL_P1)||(definedZTOOL_P2)#defineHAL_UARTTRUE#else#defineHAL_UARTTRUE#endif/*ZAPP,ZTOOL*/#endif/*HAL_UART*/#ifHAL_UART#defineHAL_UART_0_ENABLETRUE#defineHAL_UART_1_ENABLEFALSE修改地方SampleApp.h#defineUART_RX_CB_EVT0x0002//添加串口处理事件修改地方SampleApp.c串口配置voidSampleApp_Init(uint8task_id){……//UARTConfigurationhalUARTCfg_tuartConfig;uartConfig.configured=TRUE;uartConfig.baudRate=HAL_UART_BR_38400;uartConfig.flowControl=FALSE;uartConfig.flowControlThreshold=1;uartConfig.rx.maxBufSize=255;uartConfig.tx.maxBufSize=255;uartConfig.idleTimeout=1;uartConfig.intEnable=TRUE;uartConfig.callBackFunc=rxCB;HalUARTOpen(HAL_UART_PORT_0,&uartConfig);……}回调函数rxCBstaticvoidrxCB(uint8port,uint8event){//uint8rxlen;//接收数据长度//uint8*databuf;//接收数据块指针externuint8SampleApp_TaskID;uint16short_ddr;uint8short_ddr_H;uint8short_ddr_L;uint8*pointer1;uint8word_buffer[10];uint8*pointer9;uint8str_enter[]={'\n'};pointer9=&str_enter[0];short_ddr=NLME_GetShortAddr();short_ddr_H=(uint8)((short_ddr&0xff00)>>8);short_ddr_L=(uint8)short_ddr;rxlen=Hal_UART_RxBufLen(HAL_UART_PORT_0);//接收缓冲区数据长度,字节为单位databuf=osal_mem_alloc(rxlen+1+2);//多分配3字节,分配如下databuf[0]=rxlen;//一字节存放数据长度databuf[1]=short_ddr_H;//一字节存放源地址高8位databuf[2]=short_ddr_L;//一字节存放源地址低8位databuf[rxlen+1]='\n';//一字节存放换行符HalUARTRead(HAL_UART_PORT_0,databuf+3,rxlen);//读接收缓冲区数据到内存databuf+3#ifdefined(ZDO_COORDINATOR)word_buffer[0]='0';word_buffer[1]='0';word_buffer[2]='0';word_buffer[3]='0';#elseword_buffer[0]='7';word_buffer[1]='9';word_buffer[2]='6';word_buffer[3]='F';#endifword_buffer[4]=':';word_buffer[5]=databuf[0]/100+48;word_buffer[6]=(databuf[0]%100)/10+48;word_buffer[7]=databuf[0]%10+48;word_buffer[8]='\n';pointer1=word_buffer;//HalUARTWrite()写入串口正确说明数据已经正确地存储在databuf中!HalUARTWrite(HAL_UART_PORT_0,pointer1,9);HalUARTWrite(HAL_UART_PORT_0,databuf+1,rxlen+1);//把数据送串口输出HalUARTWrite(0,pointer9,1);HalUARTWrite(0,pointer9,1);if(!rxlen)osal_mem_free(databuf);//释放内存osal_set_event(SampleApp_TaskID,UART_RX_CB_EVT);}自定义发送数据函数voidSampleApp_SPI_SendData(uint8*buf,uint8len){//此处点对点传输SampleApp_SPI_SendData_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;SampleApp_SPI_SendData_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;#ifdefined(ZDO_COORDINATOR)SampleApp_SPI_SendData_DstAddr.addr.shortAddr=0x796F;#elseSampleApp_SPI_SendData_DstAddr.addr.shortAddr=0x0000;#endifif(AF_DataRequest(&SampleApp_SPI_SendData_DstAddr,(endPointDesc_t*)&SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID,len,buf,&SampleApp_TransID,0,AF_DEFAULT_RADIUS)==afStatus_SUCCESS){osal_mem_free(databuf);//必须释放内存,不然造成溢出!}else{osal_mem_free(databuf);}}变量定义afAddrType_tSampleApp_SPI_SendData_DstAddr;uint8rxlen;//接收数据长度uint8*databuf;//接收数据块指针函数声明voidSampleApp_SPI_SendData(uint8*buf,uint8len);uint8hextoword1(uint8t);//十六进制转字符uint8hextoword2(uint8t);staticvoidrxCB(uint8port,uint8event);其他…...