- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
CC2540 如何在BLE协议增加 LED 个数?
录入:edatop.com 点击:
CC2540要控制五个LED灯,并且都需独立控制,包括亮灭,不同次数的闪烁。LED的驱动实在太过精妙复杂,研究了很长时间不得要领。
BLE协议栈定义了四个,我照着添加了一个,但是没有用,以下是修改的地方:
void HalLedInit (void)
{
....
LED5_DDR |= LED5_BV;
...
}
void HalLedOnOff (uint8 leds, uint8 mode)
{
...
if (leds & HAL_LED_5)
{
if (mode == HAL_LED_MODE_ON)
{
HAL_TURN_ON_LED5();
}
else
{
HAL_TURN_OFF_LED5();
}
}
...
}
头文件中:
#define LED5_BV BV(1)
#define LED5_SBIT P1_1
#define LED5_DDR P1DIR
#define LED5_POLARITY ACTIVE_LOW
#define HAL_LED_5 0x10
#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4 | HAL_LED_5)
还有一些开关宏如#define HAL_TURN_ON_LED5() st( LED5_SBIT = LED5_POLARITY (1); )都添加了
调试发现新添加的LED不起作用,比如调用HalLedBlink(HAL_LED_5,3,50,1000); HAL_LED_5的值没有传递到HalLedOnOff();而前4个LED都正常。
求道友指点,还有什么地方遗漏了
BLE协议栈定义了四个,我照着添加了一个,但是没有用,以下是修改的地方:
void HalLedInit (void)
{
....
LED5_DDR |= LED5_BV;
...
}
void HalLedOnOff (uint8 leds, uint8 mode)
{
...
if (leds & HAL_LED_5)
{
if (mode == HAL_LED_MODE_ON)
{
HAL_TURN_ON_LED5();
}
else
{
HAL_TURN_OFF_LED5();
}
}
...
}
头文件中:
#define LED5_BV BV(1)
#define LED5_SBIT P1_1
#define LED5_DDR P1DIR
#define LED5_POLARITY ACTIVE_LOW
#define HAL_LED_5 0x10
#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4 | HAL_LED_5)
还有一些开关宏如#define HAL_TURN_ON_LED5() st( LED5_SBIT = LED5_POLARITY (1); )都添加了
调试发现新添加的LED不起作用,比如调用HalLedBlink(HAL_LED_5,3,50,1000); HAL_LED_5的值没有传递到HalLedOnOff();而前4个LED都正常。
求道友指点,还有什么地方遗漏了
/* Defaults */
#define HAL_LED_DEFAULT_MAX_LEDS 4
這有改成 5 嗎?
确实是这个原因,申请的结构体空间不够,控制LED_5时匿名访问了栈空间的某个不为0的值,条件不满足导致无法执行开关宏,谢谢指点
上一篇:CC3200如何过滤报文?
下一篇:如何修改Zigbee通信密钥?