无线传感网络实训|实验5.4 Zstack串口实验
发布者:唯众
布时间:2020-12-01 14:46:56
点击量:
1.实验目的
1)、了解CC2530组网过程、按键中断、OSAL操作系统消息发送
2)、串口发送函数
2.实验设备
硬件:PC机一台、ZIGBEE网关、ZIGBEE节点、仿真器一个、串口转USB模块一个
软件:2000/XP/win7系统,IAR8.10集成开发环境
3.实验详解
1)、打开“实验4.4Zstack串口实验\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\SampleApp\CC2530DB\SampleApp.eww”工程。在左边workspace目录下比较重要的两个文件夹分别是Zmain和App。我们开发主要在App文件夹进行,这也是用户自己添加自己代码的地方。主要修改SampleApp.c和SampleApp.h即可,如果增加传感器则增加相应的模块驱动到App里面,在SampleApp.c中调用就行。
第一步:串口初始化,串口初始化相信大家很熟悉,就是配置串口号、波特率、校验位、数据位、停止位等等。在基础实验我们都是配置好寄存器然后使用。现在我们在workspace下找到HAL\Target\CC2530EB\drivers的hal_uart.c文件,我们可以看到里面已经包括了串口初始化、发送、接收等函数,全都封装好了;我们只需根据自己需要修改相关配置,调用相应的接口函数就可使用串口了,是不是觉得很方便?如图所示。
图4.4.1
浏览一下关于串口的操作函数还是挺全的。我们看看workspace上的MT层,发觉有很多基本函数,前面带MT。包括MT_UART.C,我们打开这个文件。看到MT_UartInit()函数,这里也有一个串口初始化函数的,没错Z-stack上有一个MT层,用户可以选用MT层配置和调用其他驱动。进一步简化了操作流程。我们已经知道串口配置的方法,那么应该在那里初始化呢?当然是SampleApp_Init(),如果你还有疑问说明你上个实验还要复习一下,我们大概再说下吧。用户自己添加的应用任务程序在Zstack中的调用过程是:main()--->osal_init_system()--->osalInitTasks()--->SampleApp_Init()我们打开APP目录下的SampleApp.c发现SampleApp_Init()函数。我们在这里加入串口初始化代码。MT_UartInit();设置串口参数
1. void MT_UartInit ()
2. {
3. halUARTCfg_t uartConfig;
4. /* Initialize APP ID */
5. App_TaskID = 0;
6. /* UART Configuration */
7. uartConfig.configured = TRUE;
8.uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE; 9.uartConfig.flowContro l = MT_UART_DEFAULT_OVERFLOW;
10. uartConfig.flowControlThreshold = MT_UART_DEFAULT_THRESHOLD;
11. uartConfig.rx.maxBufSize =MT_UART_DEFAULT_MAX_RX_BUFF;
12. uartConfig.tx.maxBufSize = MT_UART_DEFAULT_MAX_TX_BUFF;
13. uartConfig.idleTimeout =MT_UART_DEFAULT_IDLE_TIMEOUT;
14. uartConf ig.intEnable = TRUE;
15. #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
16. uartConfig.callBackFunc = MT_UartProcessZToolData;
17. #elif defined (ZAPP_P1) || defined (ZAPP_P2)
18. uartConfig.callBackFunc = MT_UartProcessZAppData;
19. #else
20. uartConfig.callBackFunc = NULL;
21. #endif
22. /* Start UART */
23. #if defined (MT_UART_DEFAULT_PORT)
24. HalUARTOpen (MT_UART_DEFAULT_PORT, &uartConfig);
25. #else
26. /* Silence IAR compiler warning */
27. (void)uartConfig;
28. #endif
29. /* Initialize for ZApp */
30. #if defined (ZAPP_P1) || defined (ZAPP_P2)
31. /* Default max bytes that ZAPP can take */
32. MT_UartMaxZAppBufLen = 1;
33. MT_UartZAppRxStatus = MT_UART_ZAPP_RX_READY;
34. #endif
35. } |
第8行:uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;是配置波特率,我们有右 键“go to definition of” MT_UART_DEFAULT_BAUDRATE, 可以看到:
#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400
默认的波特率是 38400bps,现在我们修改成 115200bps,修改如下:
#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_115200
第9行:uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW; 语句是配置流控的,我 们进入定义可以看到: #define MT_UART_DEFAULT_OVERFLOW TRUE 默认是打开串口流控的,如果你是只连了TX/RX 2根线的方式务必关流控。 注意:2 根线的通讯连接一定要关流控,不然是永远收发不了信息的,现在大部产品很少用流控。#define MT_UART_DEFAULT_OVERFLOW FALSE
第16~22 行:这个是预编译,根据预先定义的 ZTOOL 或者 ZAPP 选择不同的数据处理函数。后面的 P1 和 P2 则是串口0 和串口1。我们用 ZTOOL,串口0。我们可以在 option——C/C++
图4.4.2
第二步:注册串口任务任务在 SampleApp_Init(); 刚添加的串口初始化语句下面加入语句: MT_UartRegisterTaskID(task_id); //注册串口任务任务
第三步:串口发送经过前面两个步骤,现在串口已经可以发送信息了,增加代码如图4.4.1 所示。 HalUARTWrite(0,"UartInit OK\n", sizeof("UartInit OK\n")); //串口发送 在项目配置选项卡中预编译处加入以下一些内容,如图所示。
ZIGBEEPRO
ZTOOL_P1
xMT_TASK
xMT_SYS_FUNC
xMT_ZDO_FUNC
LCD_SUPPORTED=DEBUG
2)、连接仿真器和USB转串口线,选择CoordinatorEB-Pro,编译完成后下载和调试。配置串口点调试助手为:1152008N1并打开串口,(串口请选择自己的端口号)。在IAR点全速运行,可以看到串口调试助手收到模块发过来的字符串。也许仔细的朋友会发现xMT_TASK,xMT_SYS_FUNC,xMT_ZDO_FUNC前面都有个x,事实上真正的宏是MT_TASK,MT_SYS_FUNC,T_ZDO_FUNC,加了x表示不定义它们了。给大家布置一个小实验,去掉上面的x,编译后下载看串口会收到什么?会在“UartInitOK”前面出现一段乱码,如果用16进制显示为FE开头的字符串,这是Z-stackMT层定义的串口发送格式。
图4.4.3
4.实验现象
终端节点成功连接协调器之后,按下终端节点的按键,节点发送“D1”给协调器。协调器收到消息后蜂鸣3秒,同时将消息通过串口输出到电脑串口助手上。
上一篇:无线传感网络实训|实验5.3 Zstack无线收发实验之代码学习
下一篇:无线传感网络实训|实验5.5 广播组网实验