ZigBee学习——在官方例程基础实现点灯

IAR版本 :10.10.1
Z-stack版本 :3.0.2

文章目录

  • 一、买的板子原理图
  • 二、实现过程
    • 2.1 重定义LED的物理映射(HAL层)
    • 2.2 创建LED事件(应用层)
      • 2.2.1 定义用户事件
      • 2.2.2 修改zclGenericApp_event_loop()
    • 2.3 触发事件

一、买的板子原理图

ZigBee学习——在官方例程基础实现点灯_第1张图片

二、实现过程

2.1 重定义LED的物理映射(HAL层)

ZigBee学习——在官方例程基础实现点灯_第2张图片

#define LED1_BV           BV(0)  
#define LED1_SBIT         P1_0
#define LED1_DDR          P1DIR
#define LED1_POLARITY     ACTIVE_LOW  

(1)其中的BV(N)表示数值1向左移动N位,等价于(1 << N),因此BV(0)的值为1<<0,也就是等于1。
(2)#define LED1_SBIT P1_0表示LED1与CC2530的P1_0连接。
(3)#define LED1_DDR P1DIR表示LED1对应的方向寄存器为P1DIR。P1DIR在前面的章节已经讲解过,这里不再讲解了。
(4)#define LED1_POLARITY ACTIVE_LOW表示LED1是低电平驱动的,也就是给P1_0输入低电平,LED1就会被点亮,源代码是HIGH,这里根据板子LED的接法设置为低电平驱动

2.2 创建LED事件(应用层)

2.2.1 定义用户事件

App->zcl_genericapp.h->宏定义事件(独热编码)
ZigBee学习——在官方例程基础实现点灯_第3张图片

#define TEST_LED_EVT                        0x0010 

2.2.2 修改zclGenericApp_event_loop()

App->zcl_genericapp.c->zclGenericApp_event_loop()
ZigBee学习——在官方例程基础实现点灯_第4张图片

// 处理自定义的用户事件:TEST_LED_EVT 
if ( events & TEST_LED_EVT )
{
    printf("Blink LED!\r\n");

    HalLedBlink(
        HAL_LED_1,//指定第1盏LED
        10,//指定闪烁次数是10次
        50,//指定50%的时间LED是处于开启状态
        1000);//指定1次闪烁的时间周期是1000ms
        
    //消除已经处理的事件,然后返回未处理的事件
    return ( events ^ TEST_LED_EVT );
}

2.3 触发事件

App->zcl_genericapp.c->zclGenericApp_Init()

将下面这行代码添加到这个函数的末尾

ZigBee学习——在官方例程基础实现点灯_第5张图片

// 触发事件
osal_start_timerEx( zclGenericApp_TaskID, TEST_LED_EVT, 5000 );

你可能感兴趣的:(ZigBee,Zigbee,CC2530)