zigbee协议栈应用(三)无线收发控制LED与串口使用

不管学习什么技术,例子跟实践都是最直观的,如果能在应用嵌入一些理论则会事半功倍~接下来就直接实践一番

1.原始程序

跟STM32类似,zigbee协议栈也有其基本的库文件和一些启动程序~

安装ZStack-CC2530-2.3.0-1.4.0后就可以在C:\Texas
Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\”下是一些常用例程

开发者直接使用其例程是非常方便的!

打开目录下的SampleApp这个工程

下面是个文件夹说明:

zigbee协议栈应用(三)无线收发控制LED与串口使用_第1张图片

里面三个不同的工程区别见http://blog.csdn.net/black_yu/article/details/51620279

2.无线控制LED

在TI所给例程的基础上,在以下地方分别加入程序:

1).接收数据函数 

SampleApp.c里的SampleApp_MessageMSGCB函数里加入

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  uint16 flashTime;
  byte buf[3];
  switch ( pkt->clusterId )
  {
    case SAMPLEAPP_PERIODIC_CLUSTERID://收到广播数据
      osal_memset(buf, 0 , 3);
      osal_memcpy(buf, pkt->cmd.Data, 2); //复制数据到缓冲区中
      if(buf[0]=='D' && buf[1]=='1')  //判断收到的数据是否为“D1”
      {
        HalLedBlink(HAL_LED_1, 0, 50, 500); //如果是则 Led1 间隔 500ms 闪烁
        #if defined(ZDO_COORDINATOR) //协调器收到"D1"后,返回"D1"给终端,让终端 Led1 也闪烁
        SampleApp_SendPeriodicMessage();
        #endif
      }
      else
      {
        HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);
      }
      break;


    case SAMPLEAPP_FLASH_CLUSTERID:
      flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
      HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
      break;
  }
}

2).发送周期信息

SampleApp_SendPeriodicMessage

void SampleApp_SendPeriodicMessage( void )
{
  byte SendData[3]="D1";
  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_PERIODIC_CLUSTERID,
                       2,
                       SendData,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);
    // Error occurred in request to send.
  }
}

在一个板上烧写


另一块板上烧写


然后现象就是:D4熄灭,D1闪烁

3.串口控制

在原始例程上,只要做三步:

  第一步:1.串口初始化 2. 注册串口任务任务
3. 串口发送

在void SampleApp_Init( uint8 task_id )里加入

/------------------------配置串口---------------------------------
  MT_UartInit();                    //串口初始化
  MT_UartRegisterTaskID(task_id);   //注册串口任务
  HalUARTWrite(0,"UartInit OK\n", sizeof("UartInit OK\n"));

第二步,修改串口初始化参数

MT_UartInit();里的

uartConfig.baudRate  = MT_UART_DEFAULT_BAUDRATE;
9. uartConfig.flowControl  = MT_UART_DEFAULT_OVERFLOW;

#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400
默认的波特率是 38400bps,现在我们修改成 115200bps,修改如下:
#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_115200

#define MT_UART_DEFAULT_OVERFLOW TRUE
默认是打开串口流控的,如果你是只连了 TX/RX 2根线的方式务必关流控。注意:2 根线
的 通讯连接一定要关流控,不然是永远收发不了信息的,现在大部产品很少用流控。
#define MT_UART_DEFAULT_OVERFLOW FALSE

第三步,修改预编译的内容

在项目配置选项卡中预编译处加入以下一些内容
ZIGBEEPRO
ZTOOL_P1

xMT_TASK
xMT_SYS_FUNC
xMT_ZDO_FUNC
LCD_SUPPORTED=DEBUG

你可能感兴趣的:(zigbee协议栈应用(三)无线收发控制LED与串口使用)