本文介绍了Z-stack中如何修改默认的LED的设置,并且讲解了HalLedBlink的函数,以及如何使用此函数简便的输出PWM波形。
Z-stack的中默认的LED是P1_0,P1_1,P1_4,并且是高电平触发,如果自身的板子中与其设计不一样的话,是没有办法直接使用其控制LED的函数HalLedBlink(HAL_LED_2,5,50,200)。当然,还是可以使用直接操作IO口的方法来操作LED灯,不过HalLedBlink()这个函数是十分方便的,所以我这里演示一下如何修改LED。
由于我手头的板子是低电平触发的,所以首先可以修改触发方式
1修改触发方式,改为低电平触发
找到hal_board_cfg.h
然后找到116和123,将ACTIVE_HIGH改为ACTIVITY_LOW
然后我的板子上LED3是P1_7,所以可想而知,修改的方法是把第127,128行改为
#define LED3_BV BV(7)
#define LED3_SBIT P1_7
注,如果不用这些LED,建议删除这些语句,否则可能会对其它IO口产生影响。以删除LED3为例,除了删除126行
/* 3 - Yellow */
#define LED3_BV BV(7)
#define LED3_SBIT P1_7
#define LED3_DDR P1DIR
#define LED3_POLARITY ACTIVE_HIGH
在248行左右,还有语句
HAL_TURN_OFF_LED3(); \
LED3_DDR |= LED3_BV; \
要删除,注意删除整行语句,不要留行间空隙。因为这么多行是同一个define语句
另介绍Z-stack操作LED的函数HalLedBlink
void HalLedBlink (uint8 leds, uint8 numBlinks, uint8 percent, uint16 period)
函数介绍如下
/***************************************************************************************************
* @fn HalLedBlink
*
* @brief Blink the leds
*
* @param leds - bit mask value of leds to be blinked
* numBlinks - number of blinks
* percent - the percentage in each period where the led
* will be on
* period - length of each cycle in milliseconds
*
* @return None
***************************************************************************************************/
可以看出这些参数分别是,操作哪个LED灯,闪几下,亮的时间的百分比,一个闪烁的周期是多少。之所以说这个函数很好用,是因为可以看出来,除了控制LED灯闪烁的命令之外,通过百分比和周期的设置,这个函数可以直接控制某个IO口输出脉宽调制的波形,也就是这个函数可以用来输出PWM。
如下图是使用CC2530的P1_7(3.3V)控制一个5V的灯,通过PWM来控制灯亮度的办法。HalLedBlink的最后一个参数可以填10,倒数第二个参数就是高电平时间所占总时间的百分比,值越大灯的平均亮度越高。