标题:
SerialApp-zigbee串口应用实例分析
[打印本页]
作者:
yumuzi
时间:
2010-8-17 09:39
标题:
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
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0