ZigBee Z-Stack 3.18 串口1-发送

【配套源码文档软件硬件等资源,入口见文末

这一节,基于《ZigBee CC2530 Z-Stack 06 创建基于Z-Stack的全新工程》一节中创建的全新工程ProjectApp进行进一步实验,实现调用Z-Stack中现成的串口驱动函数实现串口发送功能,具体效果为系统一上电CC2530芯片即通过串口0打印出“hello world !\r\n”。

CC2530芯片的所有片上外设中,总共有2个串口,分别称为串口0和串口1。在实际项目开发当中,一般我们会将串口0用作“调试串口”,用于打印一些提示信息;而将串口1用于与外围硬件设备对接,实现实际的项目需求。本节中我们将通过串口0实现字符串打印功能。

ProjectApp创建成功后,仅是通过编译测试了工程创建是否成功,实际上并没有做任何实质性的更改。因此我们实际现在才算是真正基于Z-Stack进行开发!为了使用Z-Stack中自带的串口驱动程序,实现串口发送功能,具体操作步骤如下:

1、协议栈中MT层相关的代码全都是基于CC2530的串口写的,所以我们在写串口程序时,最好的办法就是参考MT层对应代码来写我们自己的串口程序;具体是参考MT_UART.c中的MT_UartInit( )函数代码和MT_UART.h中相关的宏定义,来实现我们的uart0.c和uart0.h两个文件,两个文件具体代码如下:

文件uart0.c中代码:

#include "uart0.h"
#include "hal_uart.h"

void Uart0_Init(uint8 baudRate)
{
  halUARTCfg_t uartConfig;

  uartConfig.configured           = TRUE;
  uartConfig.baudRate             = baudRate;
  uartConfig.flowControl          = FALSE;
  uartConfig.flowControlThreshold = UART0_THRESHOLD;
  uartConfig.rx.maxBufSize        = UART0_RX_BUFF_MAX;
  uartConfig.tx.maxBufSize        = UART0_TX_BUFF_MAX;
  uartConfig.idleTimeout          = UART0_IDLE_TIMEOUT;
  uartConfig.intEnable            = TRUE;
  uartConfig.callBackFunc         = NULL;

  HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
} 

文件uart0.h中代码:

#ifndef UART0_H
#define UART0_H
#ifdef __cplusplus
extern "C"
{
#endif

#include "hal_types.h"

#define UART0_RX_BUFF_MAX    60
#define UART0_TX_BUFF_MAX    60
#define UART0_THRESHOLD      (UART0_RX_BUFF_MAX / 2)
#define UART0_IDLE_TIMEOUT   6

void Uart0_Init(uint8 baudRate);

#ifdef __cplusplus
}
#endif
#endif /* UART0_H */

其中:

  uartConfig.callBackFunc         = NULL;

关于这句代码,由于本节暂不实现串口接收处理数据的功能,所以此处的串口回调函数为NULL(空)!

关于具体为何uart0.c和uart0.h两个文件的格式如此,是嵌入式C语言模块化编程的基础,参考协议栈中类似的文件依葫芦画瓢即可,此处就不再赘述~

2、往工程中APP分组下添加我们参考MT_UART.c和MT_UART.h写成的uart0.c和uart0.h两个文件:将uart0.c和uart0.h两个文件放到C:\Texas Instruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\ProjectApp\Source目录下,然后按照下图所示将两个文件添加到APP分组下即可;

3、由于协议栈中MT的相关代码全都是基于串口写的,而我们又是参考MT_UART相关代码写的,所以需要将协议栈中原本与MT层相关的代码全部注释掉。具体操作如下图所示:

右击工程名,进入“Options”选项后,找到如下图中所示的“Defined symbols”,其中总共有5个预编译选项,依次为:ZTOOL_P1、MT_TASK、MT_SYS_FUNC、MT_ZDO_FUNC、LCD_SUPPORTED=DEBUG;

前4个均与MT层相关,所以均需注释掉,在需要注释的预编译选项前面加上“x”即可;

第5个预编译选项是与LCD液晶有关的,由于我们一般不使用TI原装的LCD,所以一般也会将这个注释掉,则工程中相关的代码都不会被编译!

4、此外,协议栈中还有一个名为hal_board_cfg.h的文件,里面定义了与协议栈相关的大多数硬件的使能宏定义,这边我们暂时只关心HAL_LCD和HAL_UART,我们想屏蔽LCD相关的所有代码,并使能与UART相关的底层驱动程序,文件所处位置及需修改位置如下图所示,需要将HAL_LCD和HAL_UART的宏定义分别修改为FALSE和TRUE;

5、至此,基于Z-Stack协议栈的串口驱动程序的发送部分就基本全部完成,就差最后来检验一下串口是否能够正常发送了!

双击打开ProjectApp.c文件,在ProjectApp_Init( )函数中最后的位置加入如下两行代码:

  Uart0_Init(HAL_UART_BR_115200);
  HalUARTWrite(HAL_UART_PORT_0,"hello world !\r\n",sizeof("hello world !\r\n")-1);

我们既然在ProjectApp.c文件中调用了uart0.c文件中的函数,则一定要在ProjectApp.c中加入对应的头文件——uart0.h!

具体实现代码如下:

#include "uart0.h"

最后点击“编译”图标,完成对整个工程的编译,顺利的话,肯定是 0 error(s), 0 warning(s)!

点击IAR界面上方“Download and Deubug”图标,将程序下载到CC2530芯片中(下载之前,请保证下载器、串口线和电脑三者已经连接正确!),如下图所示:

并自动进入调试界面,如下图所示:

连上串口调试助手,选择正确的串口配置后打开串口,点击上图中所示“全速运行”图标后,就可以看到串口调试助手收到了来自CC2530串口0打印的数据,正好15个字节!如下图所示:

【配套源码文档软件硬件等资源,入口见文末

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拿破仑940911

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值