永发信息网

如何在Zstack中使用串口?

答案:1  悬赏:80  手机版
解决时间 2021-11-23 15:25
如何在Zstack中使用串口?
最佳答案
使用方法
在MT包中,已经有了串口初始化即串口数据处理函数可用,关键的几个函数出现在
MT_Uart.c文件中。我们拿出来几个关键函数说明一下(我捡重要语句注释):
第一个函数

void MT_UartInit ()
{  // 这个是MT中的一个串口初始化函数,主要作用是初始化串口工作的一些规矩
halUARTCfg_t uartConfig;

App_TaskID = 0; //处理串口数据的任务ID,可以先不管

uartConfig.configured = TRUE;
uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;
//默认38400波特率;可以更改,但是可能有新问题,具体解释内容比较多,我不说;
uartConfig.flowControl = FALSE;//MT_UART_DEFAULT_OVERFLOW;
//禁止硬件流控,如果你的串口只有RXD,TXD和GND三条线,必须这么做;
uartConfig.flowControlThreshold= MT_UART_DEFAULT_THRESHOLD;
uartConfig.rx.maxBufSize  = MT_UART_DEFAULT_MAX_RX_BUFF;
uartConfig.tx.maxBufSize  = MT_UART_DEFAULT_MAX_TX_BUFF;
uartConfig.idleTimeout = MT_UART_DEFAULT_IDLE_TIMEOUT;
uartConfig.intEnable = TRUE;
#if defined (ZTOOL_P1) || defined (ZTOOL_P2)
uartConfig.callBackFunc  = MT_UartProcessZToolData;
//如果编译的时候选择使用ZTOOL,那么MT_UartProcessZtoolData将会处理串口接到的数
//据串
#elif defined (ZAPP_P1) || defined (ZAPP_P2)
uartConfig.callBackFunc = MT_UartProcessZAppData;
//如果编译的时候没有选择ZTOOL,而是选择使用了ZAPP,则由MT_UartProcessZAppData
//函数来处理串口数据串
(*如果是用CC2530的P0口那两根串口引脚,你就要define ZTOOL_P1,如果是P1口的那
两根串口引脚,你就要define ZTOOL_P2,对于ZAPP_P1和ZAPP_P2也是一个情况*)
#else
uartConfig.callBackFunc = NULL;
//这个地方,如果你有兴趣自己写一个串口处理函数,那么你实现一个My_UartProcessData
//函数,然后填到这里,替换NULL。
#endif

#if defined (MT_UART_DEFAULT_PORT)
HalUARTOpen (MT_UART_DEFAULT_PORT, &uartConfig);
//如果定义了默认串口,(0或者1),打开串口,这个HalUartOpen函数会做一大堆工作,具
//体说来就是初始化呗。。。,我没有必要展开。需要注意的是这个函数把前面哪一堆初始化
//的uartConfig做为参数传进去了噢!
#else

(void)uartConfig;
#endif

#if defined (ZAPP_P1) || defined (ZAPP_P2)

MT_UartMaxZAppBufLen = 1;
MT_UartZAppRxStatus = MT_UART_ZAPP_RX_READY;
//这两句,如果是不想使用MT_UartProcessZToolData来处理串口数据,就。。。。
//再说就要深入串口机制了,网上讲解文章太多了,自己看吧,我一会儿使用
//MT_UartProcessZToolData。
#endif
}
第二个函数
void MT_UartRegisterTaskID( byte taskID )
{
App_TaskID = taskID;
}第三个函数
void MT_UartProcessZToolData ( uint8 port, uint8 event )

osal_msg_deallocate ( (uint8 *)pMsg );
}
我们往上看看这个Message是什么?MT_UartProcessZToolData函数开始不远的地方有以下程
序段:
if (pMsg)
{

pMsg->hdr.event = CMD_SERIAL_MSG;
pMsg->msg = (uint8*)(pMsg+1);
pMsg->msg[MT_RPC_POS_LEN] = LEN_Token;
state = CMD_STATE1;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
星际争霸里的神族闪电兵怎么操作?
时代巨幕影城在哪里啊,我有事要去这个地方
give me your snapcat or faecbook or whatsa
养鹅场育雏房湿度大有什么后果?怎么防治
地质勘查中Es代表什么意思?
求紫影のソナーニル全cg
扁钢型号-50X8表示的含义
响水县第二中学地址好找么,我有些事要过去,
26岁算不算大
galaxy是什么山地车
在外面上学想家怎么办
有谁见过一本《众志成城》的书,谢谢
为什么厨师长说粤菜上档次,川湘菜不上档次
卤素能和非金属元素化合吗
为什么oppo和vivo取得成功
推荐资讯
如图 在3x3的幻方的九个
超速拍照当天就入网了吗
武汉话蛮搞人的意思
26日西安到长沙的k129列车会晚点吗
有人知道猪是什么颜色的吗
装饰公司的洽谈区办公区如何设计?
有没有关于唐嫣的英语作文如题如题
我和初三有个约会
什么叫高粘度流体?对于高粘度流体其对流给热
民国七一年银币,将介石头像价格多少?
鼎力广告公司(临溪街34)地址在哪,我要去那里
昆山市三明腾飞联通合作营业厅地址有知道的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?