使用自己的板子,直接配置寄存器驱动按键可以使用,但在OSAL中使用却没有反应,同样的OSAL程序在开发板中可以使用,请问可能是什么问题?按键端口都是P0.1。
YiKai Chen:
用示波器檢查一下按键端口P0.1訊號在按键時有沒有改變
Viki Shi:
看描述应该是移植到OSAL出现问题,建议根据STACK中的osal文档进行操作
user5773375:
回复 YiKai Chen:
是有高低电平变化的,按下为低电平
YiKai Chen:
回复 user5773375:
參考一下hal_key.c是怎樣設置中断服務,然後檢查一下你的設置
user5773375:
回复 YiKai Chen:
static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys ){ (void)shift; // Intentionally unreferenced parameter
//HalLcdWriteStringValue( "key = 0x", keys, 16, HAL_LCD_LINE_2 );
// smartRF开发板上的S1 对应我们源码上的HAL_KEY_SW_6 if ( keys & HAL_KEY_SW_6 ) { //HalLcdWriteString( "HAL_KEY_SW_6", HAL_LCD_LINE_3 ); HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH); // led1闪烁 HalLedSet(HAL_LED_2, HAL_LED_MODE_ON); // led2亮 }
嗯嗯,我就是用的hal_key.c上的SW_6(p0.1),来控制LED,相同的代码在开发板上是可以的,只是在我的电路上不可以,但直接配置的寄存器代码(没有OSAL)可以驱动按键
da qin zheng sheng:
使用了两种不同板子吧?对比硬件按键的不同!
Susan Yang:
回复 user5773375:
您可以看一下下面的回调函数。
/********************************************************************** @fnOnBoard_KeyCallback** @briefCallback service for keys** @paramkeys- keys that were pressed*state - shifted** @returnvoid*********************************************************************/ void OnBoard_KeyCallback ( uint8 keys, uint8 state ) {uint8 shift;(void)state;// shift key (S1) is used to generate key interrupt// applications should not use S1 when key interrupt is enabledshift = (OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE) ? false : ((keys & HAL_KEY_SW_6) ? true : false);if ( OnBoard_SendKeys( keys, shift ) != SUCCESS ){// Process SW1 hereif ( keys & HAL_KEY_SW_1 )// Switch 1{}// Process SW2 hereif ( keys & HAL_KEY_SW_2 )// Switch 2{}// Process SW3 hereif ( keys & HAL_KEY_SW_3 )// Switch 3{}// Process SW4 hereif ( keys & HAL_KEY_SW_4 )// Switch 4{}// Process SW5 hereif ( keys & HAL_KEY_SW_5 )// Switch 5{}// Process SW6 hereif ( keys & HAL_KEY_SW_6 )// Switch 6{}}/* If any key is currently pressed down and interruptis still enabled, disable interrupt and switch to polling */if( keys != 0 ){if( OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE ){OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);}}/* If no key is currently pressed down and interruptis disabled, enable interrupt and turn off polling */else{if( OnboardKeyIntEnable == HAL_KEY_INTERRUPT_DISABLE ){OnboardKeyIntEnable = HAL_KEY_INTERRUPT_ENABLE;HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);}} }您可以尝试在上面的函数内直接对键值进行处理。
user5773375:
回复 da qin zheng sheng:
硬件连接对比是一样的,都是按键接地,下降沿有效。
user5773375:
回复 Susan Yang:
在switch 6中处理也不行呢