首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

SerialApp-zigbee串口应用实例分析

SerialApp-zigbee串口应用实例分析

SerialApp-zigbee串口应用实例分析   本实例应用z-stack版本ZStack-1.4.3-1.2.1
  z-stack里面自带的SerialApp串口应用的例子,完成的是两个CC2430EB板通过串口连接电脑,数据的互传。它工作的流程是:CC2430天线接收数据(OTA数据),触发SerialApp_Task里面的SYS_EVENT_MSG,再判断SYS_EVENT_MSG里面的小事件AF_INCOMING_MSG_CMD,调用SerialWsn_ProcessMSGCmd(afIncomingMSGPacket_t *pkt )判断簇的种类SerialWsn_CLUSTERID1代表接受到数据块,调用(HalUARTWrite( SERIAL_APP_PORT, pkt->cmd.Data+1, (pkt->cmd.DataLength-1) )传送到串口,SerialWsn_CLUSTERID2代表接收到发送成功的response,取消自动重发,如果不,自动重
发。
  CC2430串口接受到数据,buf满溢出,自动调用rxCB函数,rxCB函数里面osal_set_event(SerialWsn_TaskID, SerialWsn_MSG_SEND_EVT),触发数据发送。然后,SerialWsn_TaskID检测到SerialWsn_MSG_SEND_EVT时间,调用SerialWsn_SendData( otaBuf, otaLen )把串口传过来的数据通过空中发送过去。
          串口能正常工作的话,首先要调用HalUARTInit ()和HalUARTOpen ( uint8 port, halUARTCfg_t*config )两个函数Uint16 HalUARTWrite ( uint8 port, uint8 *pBuffer, uint16 length);参数port,CC2430有两个UART,其中一个在P0口也就是hal_uart_port0,另一个在P1口hal_uart_port1

  另外一个就是halUARTCfg_t(串口配置结构体),我们来看看他的原型。
typedef struct
{
  bool                configured;
  uint8               baudRate;//波特率  协议栈只有38400和115200两个波特率
  bool               
flowControl;//控制位,如果是1的话就说明是四线模式,0代表2线模式,默认的是4线模式
  uint16              flowControlThreshold;
  uint8               idleTimeout;
  halUARTBufControl_t   rx;
  halUARTBufControl_t   tx;
  bool                    intEnable;
  uint32                rxChRvdTime;
  halUARTCBack_t      callBackFunc;
}halUARTCfg_t;

  在原有的例子模板中,其他地方都可以用缺省值。如果你的板子是采用2线模式的话,必须得在SearilApp中的SerialWsn_Init( uint8 task_id )把uartConfig.flowControl=TURE改成FALSE。 如果要在这个模板的基础上添加自己的应用的话,只需要修改rxCB和SerialWsn_ProcessMSGCmd。
  在数据流过程中,每发送一个数据在数据的前面加一个SerialWsn_SeqTx。每发送一个数据,SerialWsn_SeqTx会自增1,所以每个数据包的SerialWsn_SeqTx都不同。然后,目标节点接收到数据后会回复一个response,如果接收的response里面的SerialWsn_SeqTx与当前的SerialWsn_SeqTx的值一样的话,就表示发送成功,清空OTAbuf
返回列表