如何在Zstack中使用串口?

供稿:hz-xin.com     日期:2024-05-21

使用方法
在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;
}


如何在Zstack中使用串口?
答:而是选择使用了ZAPP,则由MT_UartProcessZAppData//函数来处理串口数据串(*如果是用CC2530的P0口那两根串口引脚,你就要define ZTOOL_P1,如果是P1口的那两根串口引脚,你就要define ZTOOL_P2,对于ZAPP_P1和ZAPP_P2也是一个情况*)#elseuartConfig.callBackFunc = NULL;//这个地方,如果你有兴趣自己...

如何在Zstack中使用串口
答://如果编译的时候没有选择ZTOOL,而是选择使用了ZAPP,则由MT_UartProcessZAppData//函数来处理串口数据串(*如果是用CC2530的P0口那两根串口引脚,你就要define ZTOOL_P1,如果是P1口的那两根串口引脚,你就要define ZTOOL_P2,对于ZAPP_P1和ZAPP_P2也是一个情况*)#elseuartConfig.callBackFunc = NULL;//这个地方,...

如何在Zstack中使用串口1
答:初始化串口的时候设置你的回调函数,串口收到数据后系统会调用你的函数,你就可以在里面处理数据了。

在IAR环境下的zigbee 中的zstack怎么进行在线调试?? 现在路由器上的串口...
答:嘿嘿,这个我去年的时候改过,怎么改都该不了,你可以直接改协议栈中的一个例程,就是那个两台电脑串口传输的,好像是叫Serialapp,你可以在协议栈中找找,改完之后进行语法上的修改,去年我就是帮我一本科学弟弄的,他是要用CC2430测温度然后通过传输到协调器,再通过协调器的串口发送到电脑,包括测...

zigbee调用Zstack程序串口通信 开头出现固定乱码 怎么解决?
答:问题点找到了,debug_str()会将在LCD显示的数据同时也传到PC,它是通过调用MT层中的MT_ProcessDebugStr()来完成的,所以每条显示的内容都会增加一个包头,也就是你看到的乱码。这里给你两个建议,一个屏蔽debug_str(),不增加后面的那一行,在LCD的外部是写串口通信。二是屏蔽debug_str()后,使用...

串口怎么push文件
答:文件位置:C:\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Components\hal\target\CC2530EB 工程中的位置:HAL—Target—CC2530EB—Config--- hal_board_cfg.h 注意:hal_led.c 文件只是实现了ZSTACK HAL_LED 接口函数,此文件不用修改。1. 修改LED 接口 ,例子:LED1---P1_0 /*...

msp430g2313怎样外接信号
答:还可以通过串口烧程序,不过第一次烧要先支持OAD的程序,以后才能直接用串口烧 还有无线更新程序,和串口烧程序类似,要先烧个支持无线升级的包,有115k,一般的430还存不下。MSP430直接支持的只有JTAG,串口和无线烧程序在TI的zstack中有实现,想研究可以把里面的模块搬过来改改,都有点麻烦。所以,...

MSP430可通过哪些接口进行烧写程序
答:还可以通过串口烧程序,不过第一次烧要先下载支持OAD的程序,以后才能直接用串口烧 还有无线更新程序,和串口烧程序类似,要先烧个支持无线升级的包,有115k,一般的430还存不下。MSP430直接支持的只有JTAG,串口和无线烧程序在TI的zstack中有实现,想研究可以把里面的模块搬过来改改,都有点麻烦。所以...

使用ZStack的时候出现cannot acquire state change lock的错误怎么办...
答:? 原因:出现这个错误属于小概率事件,是由libvirt引发的。出现这个问题后,该云主机上的后续操作只要调用到libvirtd就会失败。? 解决办法:killall -9 libvirtd # rm /var/run/libvirtd.pid 完成后重连物理主机。

怎么在创建ZStack云主机时指定静态IP?
答:一般情况下,ZStack云主机的IP地址是由DHCP自动分配的。但是如果你需要静态IP的话,可以这样设置:? UI方式:停止云主机,进入云主机详情页,在配置信息页面选中云主机挂载的某网卡点击操作 > 设置静态IP。? 命令行方式:o 可使用SetVmStaticIp来设置:SetVmStaticIp vmInstanceUuid=7c4162e8d32d4bea8...