您的位置:首页 > 其它

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

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

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这个工程

下面是个文件夹说明:






里面三个不同的工程区别见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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: