51uwb.cn
标题:
CC2530 修改按键驱动后 偶尔出现LED闪烁无法启动
[打印本页]
作者:
admin
时间:
2017-11-19 15:08
标题:
CC2530 修改按键驱动后 偶尔出现LED闪烁无法启动
现象描述: 上午测试两个模块+两个底板正常,下午修改按键驱动后,突然有个模块+底板出现偶尔LED1 闪烁无法启动
解决思路:第一步考虑供电,因为电池供电考虑是否电压太低,低电压报警,换供电方式后发现问题依然存在。
第二步在线debug,看是否板载初始化无法完成,单步执行Main函数,发现可以执行到 osal_start_system(); 然后F5以后才开始LED闪烁,说明问题应该和逻辑有关。
第三步ZDO部分的debug,在下面的部分下载断点
// Start the device?
if ( devState != DEV_HOLD )
{
ZDOInitDevice( 0 );
}
else
{
// Blink LED to indicate HOLD_START
HalLedBlink ( HAL_LED_4, 0, 50, 500 );
}
复制代码
发现没有执行ZDOInitDevice( 0 ); 问题基本可以确定了,就是这个判断条件的问题,向前追DEV_HOLD,发现是在如下函数里设定的
void ZDAppCheckForHoldKey( void )
{
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
// Get Keypad directly to see if a HOLD_START is needed.
// Hold down the SW_BYPASS_START key (see OnBoard.h)
// while booting to avoid starting up the device.
if ( HalKeyRead () == SW_BYPASS_START)
{
// Change the device state to HOLD on start up
devState = DEV_HOLD;
}
#endif // HAL_KEY
}
复制代码
这个的作用就是阻断正常的启动,协议栈之前有个具体使用这个的例子,好久之前看过了。在 ZDApp_Init( uint8 task_id ) 把这个函数的调用注释掉,一切就OK了。
回头看,为何修改了按键驱动就导致出现这个问题,那还需要继续看
HalKeyRead ()
uint8 HalKeyRead ( void )
{
uint8 keys = 0;
if (HAL_PUSH_BUTTON1())
{
keys |= HAL_KEY_SW_6;
}
if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT)) /* Key is active low */
{
keys |= halGetJoyKeyInput();
}
return keys;
}
复制代码
可以看到这里有个halGetJoyKeyInput(), 这个是摇杆模拟量读取,因为我们没有摇搞,而且我们的摇杆通路P06 是悬空的,会导致一些不稳定的因素。 终极绝招,将halGetJoyKeyInput()注释掉,一直返回0即可
#define HAL_KEY_JOY_CHN HAL_ADC_CHANNEL_6
复制代码
作者:
范文芳
时间:
2022-4-8 19:42
有问题打赛
作者:
范文芳
时间:
2022-4-8 19:43
0
主题
3
帖子
8
积分
新手上路
Rank: 1
积分8
沙发
发表于 48 秒前 | 只看该作者
有问题打赛
欢迎光临 51uwb.cn (http://51uwb.cn/)
Powered by Discuz! X3.3