zigbee串口接受发送流程

合集下载

zigbee无线通信模块通信流程

zigbee无线通信模块通信流程

zigbee无线通信模块通信流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Zigbee无线通信模块的通信流程详解Zigbee,一种基于IEEE 802.15.4标准的低功耗、短距离、无线通信技术,广泛应用于物联网、智能家居等领域。

zigbee网络中的信息传输方式

zigbee网络中的信息传输方式

Zigbee网络中的消息传输方式1、广播广播是zigbee网络中的一种数据传输方式,它是由网络中的一个节点向其它节点发送消息的过程。

在zigbee网络中协调器,路由器和macRxOnWhenIdle域值为TRUE的终端设备可以参与广播转发,其余节点不参与。

能够接受广播帧的目的节点由广播帧中的目的地址来确定,不同的广播地址及其对应接收节点类型如下表所示:在所有参与广播的节点中都需要维护一个包含若干条广播事务记录(Broadcast Transaction Rcord,BTR)的广播事务表(Broadcast Transaction Table,BTT),该表用来记录哪些节点已经成功转发了广播帧。

一个节点接收到一个广播帧时首先检查帧中的目的地址和自己的设备类型是否相符。

不相符则丢弃;相符的话设备从本地BTT中查找相应的BTR,若干存在,则对其进行更新;若不存在,则检查BTT 中是否有空的或者过期的BTR项。

如果没有,则丢弃广播帧;若有则添加新的BTR项并将广播帧提交到高层进行处理。

若节点属性中radius值不为0或者该设备不是终端设备则转发该帧。

BTT表中每个BTR都有有效期,在有效期过后,设备会将该BTR定义为失效以便后续写入新的BTR。

MAC PIB属性macRxOnWhenIdle值为FALSE的zigbee路由器接收到广播帧后将会以单播的形式将该帧发送到其邻居节点。

如果一个节点接收到一个广播帧后节点查找BTT中的广播帧序列号发现其另外一个邻居已经广播了该帧,则节点将忽略该广播帧。

为了方便重发广播帧,每个zigbee路由器的NWK层至少能够缓存1帧数据。

Zigbee中广播的主要用于路由发现。

广播过程如下图所示:2、组播组播就是针对zigbee网络的某个固定群组进行消息传送。

在zigbee网络中将多个节点在同一个Group ID下注册,从而使其逻辑上形成一个群组。

当针对该组传送数据帧,只有组内的所有节点都能够接收该帧。

zigbee数据的发送和接收

zigbee数据的发送和接收

数据的发送和接收一、数据的发送在ZStack2006的协议栈中,我们只需调用函数AF_DataRequest()即可完成数据的发送。

afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options,uint8 radius )而我们在使用AF_DataRequest() 函数时只需要了解其参数便可以非常灵活的以各种方式来发送数据。

AF_DataRequest()函数参数说明如下:*dstAddr---------------------发送目的地址、端点地址以及传送模式*srcEP -----------------------源端点cID ---------------------------簇IDlen ---------------------------数据长度*buf -------------------------数据*transID --------------------序列号options ----------------------发送选项radius -----------------------跳数*dstAddr决定了消息发送到那个设备及那个endpoint,而簇ID(cID)决定了设备接收到信息如何处理。

簇可以理解为是一种约定,约定了信息怎么处理。

重要参数说明:1、地址afAddrType_ttypedef struct{union{uint16 shortAddr; //短地址}addr;afAddrMode_taddrMode; //传送模式byteendPoint; //端点号}afAddrType_t;2、端点描述符endPointDesc_ttypedef struct{byteendPoint; //端点号byte*task_id; //那一个任务的端点号SimpleDescriptionFormat_t*simpleDesc;//简单的端点描述afNetworkLatencyReq_tlatencyReq;}endPointDesc_t;3、简单描述符SimpleDescriptionFormat_ttypedef struct{byte EndPoint; //EPuint16 AppProfId; //应用规范IDuint16 AppDeviceId; //特定规范ID 的设备类型byte AppDevVer:4; //特定规范ID 的设备的版本byte Reserved:4; //AF_V1_SUPPORTusesforAppFlags:4.byte AppNumInClusters; //输入簇ID 的个数cId_t *pAppInClusterList; //输入簇ID 的列表byte AppNumOutClusters; //输出簇ID 的个数cId_t *pAppOutClusterList; //输出簇ID 的列表}SimpleDescriptionFormat_t;4、簇ID cIDClusterID--具体应用串ID5、发送选项options发送选项有如下选项#defineAF_FRAGMENTED 0x01#defineAF_ACK_REQUEST 0x10#defineAF_DISCV_ROUTE 0x20#defineAF_EN_SECURITY 0x40#defineAF_SKIP_ROUTING 0x80其中AF_ACK_REQUEST为发送后需要接收方的确认6、半径、条数radius传输跳数或传输半径,默认值为10数据发送模式说明:在协议栈数据发送模式有以下几种:单播、组播、广播和直接发送四种模式。

8Zigbee实验报告《串口通讯-收发字符串》

8Zigbee实验报告《串口通讯-收发字符串》

2019——2020学年第二学期
专业
班级
学号
姓名
日期
实验
题目
收发字符串
实验
目的
熟悉并掌握CC2530芯片串口发送和接收数据的操作,为今后的综合实验打"下基础。

实验内容与步骤实验内容:
,使串口将接收的数据再发送。

实验步骤
1)打开鼎轩VSN实验箱,检查实验箱设备,确保实验箱设备完整、连接无误后,连接电源线,打开电源开关;
2)用烧录线连接汇聚网关上的烧录接口与电脑UsB接口;
3)双击打开目录(/cc2530-simple-demo/ USART-send-receive)下的工程图标USART-SR. eww打开工程;
4)点击1AR中的图标按钮编译程序;
5)完成编译后若没有错误信息,将实验箱节点编程开关上汇聚网关开关拨上去,点击调试并下载按钮将程序下载到汇聚网关上;
6)用串口线连接汇聚网关上的数据输出口和PC机USB接口, 打开串口助手,正确选择串口号(视具体电脑而定) 、波特率(9600) ,其他配置如下图都不更改。

7)在串口助手上字符串输入框内,输入需要传输的内容,点击发送按钮,可以看到字符串经串口传送给汇聚网关,然后又由串口打印输出,输出内容如下图:
.8)修改实验代码,实现输入字符1,红灯亮,输入字符2,红灯灭。

实验内容与步骤。

7Zigbee实验报告《串口通讯-发送字符串》

7Zigbee实验报告《串口通讯-发送字符串》
教师评定
签字: 年 月 日
相关寄存器:
,相关寄存器UxCSR, UxCSR, UxGCR. UxBUF, UxBAUD, CLKCONCMD,CLKCONSTA如
第二页
实验内容与步骤
实验步骤
第三页
实验内容与步骤
CC2530配置串口的一般步骤:1、配置10,使用外部设备功能。此处配置PO-2和Po3用作串口UARTO2、配置相应串口的控制和状态寄存器。3、配置串口工作的波特率。
2019——2020学年第二学期
专业
班级
讯-发送字符串
实验目的
1)、通过实验掌握CC2530芯片串口配置与使用
2)、观察D2串口发送指示灯的变化,每发送一串字符闪一次
注:嵌入式开发中,当程序能跑起来后,串口是第一个要跑起来的设备,所有的工作状态,交互信息都会从串口输出
实验总结
该实验完成串口的基本通讯。在串口通讯中一般有两种方式来接受数据种是查询法、一种是中断法。查询法就是要串口一致处于等待状态,看串口上是不是有数据,一旦数据接收完毕,就开始对接收的数据进行相应的操作。这个方法需要让程序一致等待串口,所以这种方法效率还是比较低的。中断法师运用串口的中断服务子程序来完成的,如果串口上有数据的话,那么会调用中断向量,中断向量把程序指针指到相应的中断服务服务程序上。在中断服务程序完成之后程序只能还会跳转到中断之前的地址。这个方法的效率比较高,但是从稳定性上面讲,这种方法不如查询法。本实验用的是中断法。
实验内容与步骤
实验内容:
相关电路图:
注:图中OR的电阻是空贴的哦
PO 2,PO 3配置为外设功能时: PO2为Rx, PO3为TX. USARTO和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具有同样的功能,可以设置在单独的1/0引脚。此种串口设计是没有流控功能的

串口通信原理及操作流程

串口通信原理及操作流程

串口通信原理及操作流程串口通信是一种通过串行连接来传输数据的通信方式。

相对于并行通信而言,串口通信只需要一条数据线来传输数据,因此更节省空间和成本。

串口通信常用于计算机与外设之间的数据传输,如打印机、调制解调器、传感器等。

串口通信的原理主要是通过发送和接收数据的方式来实现通信。

在串口通信中,发送方将要传输的数据按照一定的协议进行封装,然后逐位地通过数据线发送给接收方。

接收方在接收到数据后,根据协议进行解封,得到传输的数据。

串口通信的操作流程如下:1.配置串口参数:在进行串口通信之前,需要先对串口进行初始化和配置。

配置包括波特率、数据位、停止位、奇偶校验等。

波特率表示每秒钟传输的位数,不同设备之间的串口通信需要保持一致。

2.打开串口:打开串口可以通过编程语言的串口操作函数来实现。

打开串口时,应该确保该串口没有被其他程序占用。

3.发送数据:发送数据时,需要将待发送的数据封装成符合协议要求的数据包。

一般情况下,数据包开头会有起始符和目标地址、源地址等标识信息,以便接收方识别数据包。

4.接收数据:接收数据时,需要通过串口接收缓冲区来获取接收到的数据。

一般情况下,接收方会设置一个数据接收完成的标志位,用于通知上层应用程序接收到了数据。

5.解析数据:接收到的数据包需要进行解析,以获取有效的数据。

解析的方式根据协议的不同而不同,可以是根据提前约定的规则进行解析,或者是根据协议中的标志位进行解析。

6.处理数据:经过解析后得到的数据可以进行相应的处理。

处理的方式根据具体的应用场景来确定,例如将数据显示在界面上、存储到文件中等。

7.关闭串口:通信结束后,需要关闭串口以释放相关资源,并防止其他应用程序对串口的访问。

需要注意的是,串口通信的可靠性和稳定性对于一些实时性要求较高的应用来说是非常重要的。

在进行串口通信时,应该合理选择合适的串口参数,确保数据的正确传输和解析。

此外,在编程时应该进行异常处理,防止因异常情况导致的数据丢失或通信中断。

Zigbee接收数据流程图

Zigbee接收数据流程图

Zigbee接收数据流程图Zigbee协议利用一个13192的接收中断处理接收事件void interrupt IRQIsr(void) >>>>>>>>>>>>>>>>>>>>>>>对13192的中断处理事件if ((u16StatusContent & RX_IRQ_MASK) != 0) //接收中断事件{RTXENDeAssert(); /* Forces the MC13192 to idle. */if (((u16StatusContent & CRC_VALID_MASK) == 0) && ((gsPhyOptions.Bits.u1PromiscuousMode == FALSE))) {/* If an invalid CRC, restart receiver. *//* Read the MC13192 trx register. Timer trigger off. */u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F);/* Update the trx register */SPIDrvWrite(MODE_ADDR, u16StatusContent);RTXENAssert(); /* Forces the MC13192 to enter the receive mode. */return;}else {/* Read received packet length register and mask off length bits */u8DataLength = (UINT8) (SPIDrvRead(RX_PKT_LEN) & 0x7F);if (u8DataLength < 5) /* Rx_pkt_length is bad when <5because of CRC and byte codes. */{/* Read the MC13192 trx register. Timer trigger off. */u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F);/* Update the trx register. */SPIDrvWrite(MODE_ADDR, u16StatusContent);/* Forces the MC13192 to enter the receive mode. */RTXENAssert();return;}/* Test the Byte Codes */u16Temp = SPIDrvRead2(RX_PKT); /* Get the code bytes */if ((u16Temp != 0xFF7E) && ((gsPhyOptions.Bits.u1PromiscuousMode == FALSE))) {/* Read the MC13192 trx register. Timer trigger off. */u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F);/* Update the trx register. */SPIDrvWrite(MODE_ADDR, u16StatusContent);/* Forces the MC13192 to enter the receive mode. */RTXENAssert();return;}/* A valid packet has been received. */ //一个有效的数据包被读取gu8RTxMode = IDLE_MODE; /* Set the rtx_state to idle */SPIDrvWrite(T1_HI_ADDR, 0x8000); /** Disables TC1 and clears the* IRQ.*/SPIDrvWrite(T1_LO_ADDR, 0x0000);psDrvRxPacket->u8DataLength = u8DataLength;psDrvRxPacket->u8Status = SUCCESS;PDDataIndication(); /* Notify PHY that there is data available. */ SOF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>PDDataIndication()函数原型void PDDataIndication(){/* Read the Data only if it is a good packet. */if (psDrvRxPacket->u8Status == SUCCESS){RAMDrvReadRx(psDrvRxPacket); /** Read data from MC13192,* check status*/ SOF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >RAMDrvReadRx(psDrvRxPacket);UINT8 RAMDrvReadRx(tRxPacket *psRxPkt){UINT8 i, u8TempByte; /* Temporary counters. */UINT8 u8T empValue; /** Used by SPIClearRecieveDataReg to* flush SPI1D register during readUINT8 u8Status = 0; /* Holder for the return value */UINT16 u16RxLength;u16RxLength = SPIDrvRead(RX_PKT_LEN); /** Read the RX packet length* register contents*/u16RxLength &= 0x007F; /* Mask out all but the RX packet length *//* MC13192 reports length with 2 CRC bytes and 2 Code bytes,* remove them.*/if (u16RxLength >= 5) {psRxPkt->u8DataLength = u16RxLength - 4; /** Less byte code* and CRC*/}else {psRxPkt->u8DataLength = 0;}if ((psRxPkt->u8DataLength >= 1) && \(psRxPkt->u8DataLength <= psRxPkt->u8MaxDataLength)) { /** If <5, the packet* is garbageSPIClearRecieveStatReg(); /* Clear status register (SPRF, SPTEF) */SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*/MC13192DisableInterrupts(); /* Necessary to prevent double SPI access */AssertCE(); /* Enables MC13192 SPI */SPISendChar(RX_PKT | 0x80); /* SPI RX ram data register */ SPIWaitTransferDone(); /* For this bit to be set, SPTED* MUST be set.*/SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*/SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain MSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*/SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain LSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*//* Byte codes */SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain LSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/u8TempValue = SPIRead(); /* Read first code byte */SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain LSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/u8TempValue = SPIRead(); /* Read second code byte */u8TempByte = 0; /* Byte counter for *contents *//* Word loop. Round up. Deduct CRC. */for (i=0; i<((u16RxLength-1)>>1); i++) {SPISendChar(u8TempValue);/** Dummy write. Receive register of SPI* will contain MSB*/SPIWaitTransferDone(); /** For this bit to be set, SPTED MUST be* set. Get MSB*//* For a trailing garbage byte, just read and discard */if ((u8TempByte + 3) == u16RxLength) {SPIClearRecieveDataReg(); /* Discard */}else {psRxPkt->pu8Data[u8TempByte + 1] = SPIRead(); /* Read MSB */}SPISendChar(u8TempValue);/* //就是把值赋给SPID寄存器* Dummy write. Receive register of SPI* will contain LSB*/SPIWaitTransferDone(); /** For this bit to be set, SPTED MUST be* set. Get LSB*/psRxPkt->pu8Data[u8TempByte] = SPIRead(); /* Read LSB */ u8TempByte = u8T empByte + 2; /* Increment byte counter */ }DeAssertCE(); /* Disables MC13192 SPI */psRxPkt->u8Status = SUCCESS;MC13192RestoreInterrupts(); /* Restore MC13192 interrupt status */}/* Check to see if a larger packet than desired is received. */ if (psRxPkt->u8DataLength > psRxPkt->u8MaxDataLength) { psRxPkt->u8Status = OVERFLOW;}return u8Status;}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >RAMDrvReadRx(psDrvRxPacket);EOF}EnableInterrupts; /* Allow system interrupts within the IRQ handler */MCPSDataIndication(psDrvRxPacket);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>MCPSDataIndication(psDrvRxPacket);函数原型 SOFvoid MCPSDataIndication(tRxPacket *gsRxPacket){UINT8 i=0;/** Place your code here to handle a mac layer data indication.* RX packet is in the global structure* gsRxPacket.dataLength and gsRxPacket.data*/if (gsRxPacket->u8Status == SUCCESS){/* Packet received *///if (gsRxPacket->pu8Data[0] == 'A' && gsRxPacket->pu8Data[1] == 'C' && gsRxPacket->pu8Data[2] == 'K')// {// if (gi8AppStatus== WAITING_FOR_ACK)// {// gi8AppStatus= RECEIVER_ALWAYS_ON; /* go back to rx_mode. */// }// } else /* Not an ACK */// {// LCDWriteString(1, &gsRxPacket->pu8Data[0]);for(i=0;iu8DataLength;i++) //在包接收模式下依次读取接收包中的数据{// SCITransmitStr(&gsRxPacket->pu8Data[0]);// SCITransmitStr(&gsRxPacket->pu8Data[1]);SCITransmitStr(&gsRxPacket->pu8Data[i]);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void SCITransmitStr2函数原型 SOFvoid SCITransmitStr2(UINT8 *pStr){UINT16 i;UINT16 nStrLen=1;for (i=0; i{SCIStartTransmit(pStr[i]);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>SCIStartTransmit函数原型 SOFvoid SCIStartTransmit(UINT8 cData){while (!SCIS1_TDRE); /* ensure Tx data buffer empty */SCID = cData; /* load data to SCI2 register */while (!SCIS1_TC); /* wait for Tx complete */}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>SCIStartTransmit函数原型 EOF}}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void SCITransmitStr2函数原型 EOF// SCITransmitStr(&gsRxPacket->pu8Data[4]);}// gi8AppStatus = TRANSMIT_ACK; //原程序// SCITransmitStr(&gsRxPacket->pu8Data);gi8AppStatus =RECEIVER_ALWAYS_ON; //修改后接收完毕不需要应答直接进入接收状态// }}// if (gsRxPacket->u8Status == TIMEOUT) //不需要处理超时事件// {/* Received TIMEOUT */// gi8AppStatus = TIMEOUT_STATE;// }}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>MCPSDataIndication(psDrvRxPacket);函数原型 EOF}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>PDDataIndication()函数原型EOFreturn; }}}。

实验四Zigbee无线通信及RS232串口通信实验

实验四Zigbee无线通信及RS232串口通信实验

实验四Zigbee⽆线通信及RS232串⼝通信实验实验四 Zigbee⽆线通信及RS232串⼝通信实验实验预习要求1、了解Zigbee⽆线通信原理。

2、学习RS232串⼝和定时器编程⽅法。

⼀、实验⽬的1、了解Zigbee驱动函数的功能。

2、了解MSP430F6638中USCI_Ax模块的UART模块的使⽤。

3、掌握MSP430F6638的串⼝通信和定时器的使⽤。

⼆、实验器材PC机、两个CC2520模块、两台MSP430F6638实验箱、USB数据线、杜邦线三、实验内容1、验证性实验利⽤两个Zigbee模块通信,⼀个模块作发射,⼀个作接收。

发射模块所在实验箱按下按键控制接收模块所在实验箱上LED1的亮灭,从⽽实现⽆线点灯的功能。

2、设计性实验利⽤MSP430F6638单⽚机的USCI_Ax模块进⾏RS232串⼝通信,实现PC机和单⽚机的双向通信,要求如下:(1)单⽚机发送数字0到9⾄ PC机,从数字5开始发送,每隔1s发送⼀个数。

若单⽚机开发板上按下⼀按键(例如S3),则数字加1后进⾏发送,加到9以后,⼜从0开始,若没有按键按下,则继续发送当前的数字。

在PC机上⽤串⼝调试助⼿软件查看PC机接收的数据是否正确。

(2)PC机向单⽚机发送点灯的命令。

如果单⽚机接收到PC机发送的数字1,则点亮单⽚机开发板上的LED1;接收到PC机发送的数字2,则点亮单⽚机开发板上的LED2,……,直到LED5点亮。

四、实验原理1、验证性实验Zigbee是基于IEEE802.15.4标准的低功耗个域⽹协议。

根据这个协议规定的技术是⼀种短距离、低功耗的⽆线通信技术。

这⼀名称来源于蜜蜂的⼋字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在⽅位信息,也就是说蜜蜂依靠这样的⽅式构成了群体中的通信⽹络。

其特点是近距离、低复杂度、⾃组织、低功耗、低数据速率、低成本。

主要适合⽤于⾃动控制和远程控制领域,可以嵌⼊各种设备。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

zigbee串口接受发送流程
前面学会了如何使用串口,但是仅仅学会使用串口远远不够,这两天把串口相关代码又看了一遍,不能说是全部弄清楚,至少能够从总体把握了。

串口接受DMA模式:data--U0DBUF--DMA--rxBuf--(通过调用回调函数)HalUARTRead()读取rxBUf中的数据--设置事件发生标志--调用相关的处理函数
串口接收中断模式:data--U0DBUF-中断--rxBuf--(通过调用回调函数)--HalUARERead()读取rxBuf数据--设置事件发生标志--调用相关的处理函数
下面较为详细的说明以上两种方法:
中断:中断函数把U0DBUF数据放入rxBuf()存储空间去,大概每过200ms后调用polllsr()函数,得到未被读取的字节个数,然后返回HalUARTpoll()进行下一步处理。

如果触发以下三种事件:rxBuf()接收满,rxBuf接收超时,rxBuf()接收到预设值,则调用回调函数,读取数据。

其中回调函数完成以下事情读取缓冲区的数据,设置事件发生标志,特别注意如果mt中回调函数没有编译,则回调函数在应用层中,因此可以直接在应用层处理。

如果mt回调函数有编译则设置mt中的任务,调用其中的任务处理函数。

dma:主要区别就是将中断服务程序改为dma模式,其余一样。

(关于dma方式毛毛老师已经说的很清楚了,有需要的同学可以参考《Zstack中串口操作的深度解析dma(一》)
注意事项:对于大量的数据发送,当接受缓冲区的数据达到一定数量,将触发接收满,超时,达到预设值三个事件,通过硬件终止pc与串口的数据传送。

当数据取完后,再通过软件将硬件打开,继续传输数据。

还是有些细节没有弄明白,必须通过实验来验证。

欢迎各位来交流。

相关文档
最新文档