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 触发事件
一、买的板子原理图
二、实现过程
2.1 重定义LED的物理映射(HAL层)
#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->宏定义事件(独热编码)
#define TEST_LED_EVT 0x0010
2.2.2 修改zclGenericApp_event_loop()
App->zcl_genericapp.c->zclGenericApp_event_loop()
// 处理自定义的用户事件: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()
将下面这行代码添加到这个函数的末尾
// 触发事件
osal_start_timerEx( zclGenericApp_TaskID, TEST_LED_EVT, 5000 );