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