ZStack3.0链接(取自TI官网,如有侵权,联系删除)
通过网盘分享的文件:Z-Stack 3.0.2.exe
链接: https://pan.baidu.com/s/1zNLnx4tllg3NkGLAEK9aPA?pwd=vph1 提取码: vph1
Z-Stack 3.0.2\Projects\zstack\HomeAutomation\SampleSwitch\CC2530DB
按照路径打开工程SampleSwitch.eww
一、查看HAL库硬件软件适配情况
打开hal_board_cfg.h文件
对照自己的开发板做相应修改,如您的LED1灯在P1_2端口,则改为LED1_BV BV(2) LED1_SBIT P1_2,以此类推。
二、定义用户自定义函数事件号
打开zcl_samplesw.h文件
添加代码:
#define SAMPLEAPP_TEST_EVT 0x1000
(任务事件号只能有一位为1,例:0x1000二进制为0001 0000 0000 0000)
打开zcl_samplesw.c
在用户层的初始化函数zclSampleSw_Init()里添加代码:
osal_start_timerEx(zclSampleSw_TaskID, SAMPLEAPP_TEST_EVT, 3000);
该段代码的含义是:启动一个定时器,任务的ID是zclSampleSw_TaskID,事件ID是SAMPLEAPP_TEST_EVT,当3秒到达时把事件SAMPLEAPP_TEST_EVT添加到zclSampleSw_TaskID任务的事件队列中,事件处理函数会处理这个事件。
(一个任务可能包含多个事件,比如打开LED灯,打开风扇,关闭空调等等...)
三、应用层逻辑代码
我们首先学习Zstack协议包下HAL库封装的LED闪烁函数:
该函数在hal_led.c文件中定义.
extern void HalLedBlink( uint8 leds, uint8 cnt, uint8 duty, uint16 time );
四个参数分别为:LED端口选择,闪烁次数,占空比,时间。
在zcl_samplesw.c文件中找到用户事件循环函数zclSampleSw_event_loop(),在里面添加代码:
if(events & SAMPLEAPP_TEST_EVT)
{
HalLedBlink(HAL_LED_1,10,50,1000); //LED1端口,闪烁10次,占空比50,间隔1s
HalLedBlink(HAL_LED_2,10,50,1000);
return ( events ^ SAMPLEAPP_TEST_EVT);
}
随后把程序烧写进开发板。
可以看到LED1,LED2共同闪烁10次停下。
实验现象:
ZStack协议控制LED闪烁