This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2530:CC2530无法使用2个按钮

Guru**** 2535750 points
Other Parts Discussed in Thread: Z-STACK, CC2530

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/990688/cc2530-cc2530-is-not-working-with-2-buttons

器件型号:CC2530
Thread 中讨论的其他器件:Z-stack

大家好、

我´m 定制板来实现两个开关按钮、S1 (P0.4)和 S2 (P0.1)、我将 S1 (SW6)复制到 S2来实现它。 我在 HAL_ISR_function (halKeyPort0Isr、P0INT_vector)和特殊寄存器(使用 IAR Registers 面板)中看到,当我按下 S1和 S2时,与每个代码相关的代码在一定程度上会在代码中工作(点击)。

我使用断点观察 到、在两个按钮的 HalKeyPoll 中  、已达到 HAL_PUSH_Button1 ()和 HAL_PUSH_Button2 ()行。 它导致键值0x20 (正确值)和0x60 (0x20 + 0x040)。 在这两个按钮在应用程序中引起相同的效果后、行将同时到达键和 HAL_KEY_SW_6以及 键和 HAL_KEY_SW_7。

我不知道如何解决它。 有人、请帮我吗?

´ll:我使用 Z-Stack Home 1.2.2a.44539、在实施后、我将升级到 Z-Stack 3.0.1。

下面的 I 包括所有与 S1和 S2相关的配置(hal_board_cfg.h、 hal_key.c、 hal_key.h 和 board.c)

hal_board_cfg.h

/* S1 */
#define PUSH1_BV          BV(4)
#define PUSH1_SBIT        P0_4

/* S2 */
#define PUSH2_BV          BV(1)
#define PUSH2_SBIT        P0_1

#define PUSH1_POLARITY    ACTIVE_HIGH
#define PUSH2_POLARITY    ACTIVE_HIGH

hal_key.h

/* Interrupt option - Enable or disable */
#define HAL_KEY_INTERRUPT_DISABLE    0x00
#define HAL_KEY_INTERRUPT_ENABLE     0x01

/* Key state - shift or nornal */
#define HAL_KEY_STATE_NORMAL          0x00
#define HAL_KEY_STATE_SHIFT           0x01

#define HAL_KEY_SW_1 0x01  // Joystick up
#define HAL_KEY_SW_2 0x02  // Joystick right
#define HAL_KEY_SW_5 0x04  // Joystick center
#define HAL_KEY_SW_4 0x10  // Joystick left
#define HAL_KEY_SW_3 0x08  // Joystick down ant 10

#define HAL_KEY_SW_6 0x20  // Button S2 
#define HAL_KEY_SW_7 0x40  // Button S1 

hal_key.c

/**************************************************************************************************
 * @fn      HalKeyConfig
 *
 * @brief   Configure the Key serivce
 *
 * @param   interruptEnable - TRUE/FALSE, enable/disable interrupt
 *          cback - pointer to the CallBack function
 *
 * @return  None
 **************************************************************************************************/
void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)
{
  /* Enable/Disable Interrupt or */
  Hal_KeyIntEnable = interruptEnable;

  /* Register the callback fucntion */
  pHalKeyProcessFunction = cback;

  /* Determine if interrupt is enable or not */
  if (Hal_KeyIntEnable)
  {
    /* Rising/Falling edge configuratinn */
    PICTL &= ~(HAL_KEY_SW_6_EDGEBIT);    /* Clear the edge bit */
    /* For falling edge, the bit must be set. */
  #if (HAL_KEY_SW_6_EDGE == HAL_KEY_FALLING_EDGE)
    PICTL |= HAL_KEY_SW_6_EDGEBIT;
  #endif
  
    /* Interrupt configuration:
     * - Enable interrupt generation at the port
     * - Enable CPU interrupt
     * - Clear any pending interrupt
     */
    HAL_KEY_SW_6_ICTL |= HAL_KEY_SW_6_ICTLBIT;
    HAL_KEY_SW_6_IEN |= HAL_KEY_SW_6_IENBIT;
    HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT);


   /* Rising/Falling edge configuratinn */
    PICTL &= ~(HAL_KEY_SW_7_EDGEBIT);    /* Clear the edge bit */
    /* For falling edge, the bit must be set. */
  #if (HAL_KEY_SW_7_EDGE == HAL_KEY_FALLING_EDGE)
    PICTL |= HAL_KEY_SW_7_EDGEBIT;
  #endif

	HAL_KEY_SW_7_ICTL |= HAL_KEY_SW_7_ICTLBIT;
    HAL_KEY_SW_7_IEN |= HAL_KEY_SW_7_IENBIT;
    HAL_KEY_SW_7_PXIFG = ~(HAL_KEY_SW_7_BIT);

    /* Rising/Falling edge configuratinn */

    /* Interrupt configuration:
     * - Enable interrupt generation at the port
     * - Enable CPU interrupt
     * - Clear any pending interrupt
     */

    /* Do this only after the hal_key is configured - to work with sleep stuff */
    if (HalKeyConfigured == TRUE)
    {
      osal_stop_timerEx(Hal_TaskID, HAL_KEY_EVENT);  /* Cancel polling if active */
    }
  }
  else    /* Interrupts NOT enabled */
  {
    //HAL_KEY_SW_6_ICTL &= ~(HAL_KEY_SW_6_ICTLBIT); /* don't generate interrupt */
    HAL_KEY_SW_6_IEN &= ~(HAL_KEY_SW_6_IENBIT);   /* Clear interrupt enable bit */
	osal_set_event(Hal_TaskID, HAL_KEY_EVENT);
	
	//HAL_KEY_SW_7_ICTL &= ~(HAL_KEY_SW_7_ICTLBIT); /* don't generate interrupt */
    HAL_KEY_SW_7_IEN &= ~(HAL_KEY_SW_7_IENBIT);   /* Clear interrupt enable bit */
	osal_set_event(Hal_TaskID, HAL_KEY_EVENT);
	
  }

  /* Key now is configured */
  HalKeyConfigured = TRUE;
}


/**************************************************************************************************
 * @fn      HalKeyRead
 *
 * @brief   Read the current value of a key
 *
 * @param   None
 *
 * @return  keys - current keys status
 **************************************************************************************************/
uint8 HalKeyRead ( void )
{
  uint8 keys = 0;

	if (HAL_PUSH_BUTTON1())
	{
		keys |= HAL_KEY_SW_6; 
	} 
	
	if (HAL_PUSH_BUTTON2())
	{
		keys |= HAL_KEY_SW_7;
	}
  return keys;
}


/**************************************************************************************************
 * @fn      HalKeyPoll
 *
 * @brief   Called by hal_driver to poll the keys
 *
 * @param   None
 *
 * @return  None
 **************************************************************************************************/
void HalKeyPoll (void)
{
  uint8 keys = 0;
 
  /* If interrupts are not enabled, previous key status and current key status
   * are compared to find out if a key has changed status.
   */
  if (!Hal_KeyIntEnable)
  {
    if (keys == halKeySavedKeys)
    {
      /* Exit - since no keys have changed */
      return;
    }
    /* Store the current keys for comparation next time */
    halKeySavedKeys = keys;
  }
  else
  {
    /* Key interrupt handled here */
  }


	if (HAL_PUSH_BUTTON1())
  {
		keys |= HAL_KEY_SW_6; 
  } 
  

	if (HAL_PUSH_BUTTON2())
  {
		keys |= HAL_KEY_SW_7; 
  }

	
  /* Invoke Callback if new keys were depressed */
  if (keys && (pHalKeyProcessFunction))
  {
    (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
  }
}

/**************************************************************************************************
 * @fn      halProcessKeyInterrupt
 *
 * @brief   Checks to see if it's a valid key interrupt, saves interrupt driven key states for
 *          processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later.
 *
 * @param
 *
 * @return
 **************************************************************************************************/
void halProcessKeyInterrupt (void)
{
  bool valid=FALSE;

  if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)  /* Interrupt Flag has been set */
  {
    HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */
    valid = TRUE;
	
  }
  
  if (HAL_KEY_SW_7_PXIFG & HAL_KEY_SW_7_BIT)  /* Interrupt Flag has been set */
  {
    HAL_KEY_SW_7_PXIFG = ~(HAL_KEY_SW_7_BIT); /* Clear Interrupt Flag */
    valid = TRUE;

  }

  if (valid)
  {
    osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);
  }
}

OnBoard.c

void OnBoard_KeyCallback ( uint8 keys, uint8 state )
{
  uint8 shift;
  (void)state;

  shift = (keys & HAL_KEY_SW_6) ? true : false;
 // shift = (keys & HAL_KEY_SW_7) ? true : false;

  if ( OnBoard_SendKeys( keys, shift ) != ZSuccess )
  {
    // Process SW1 here
    if ( keys & HAL_KEY_SW_1 )  // Switch 1
    {
    }
    // Process SW2 here
    if ( keys & HAL_KEY_SW_2 )  // Switch 2
    {
    }
    // Process SW3 here
    if ( keys & HAL_KEY_SW_3 )  // Switch 3
    {
    }
    // Process SW4 here
    if ( keys & HAL_KEY_SW_4 )  // Switch 4
    {
    }
    // Process SW5 here
    if ( keys & HAL_KEY_SW_5 )  // Switch 5
    {
    }
    // Process SW6 here
    if ( keys & HAL_KEY_SW_6 )  // Switch 6
    {
    }
	 // Process SW7 here
    if ( keys & HAL_KEY_SW_7 )  // Switch 7
    {
    }
  }
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexander、

    HAL_PUSH_Button1应返回 HAL_KEY_SW_6 (0x20)、HAL_PUSH_Button2应返回 HAL_KEY_SW_7 (0x40)。  HAL_KEY_SW_6 | HAL_KEY_SW_7 (0x60)不应返回、除非 HAL_PUSH_Button1和 HAL_PUSH_Button2都返回 true。  您应该检查硬件线路以确认按下一个按钮不会以某种方式改变两个输入引脚的状态。 确保删除所有游戏手柄/游戏键代码(因为它未被使用)并相应地修改  zcl_samples*.c 中的 zclSample*_HandleKeys。

    由于 UI 在 Z-Stack HA 1.2.2a 和3.0.x 之间发生了变化、我建议您升级并评估更新堆栈上的行为是否发生变化。

    此致、
    Ryan   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好´m、我很高兴听到您的声音!

    我´ll 两 个外部物理按钮、 在 SmartRF05EB 的激励下、连接到我的定制板、以立即执行详尽的测试。 但我想更好地解释一下我看到的是什么是正确的。

    我目前使用光耦合   器来连接 CC2530、并通过两种方法(PUSH1_SBIT/ P0_4和 PUSH2_SBIT/ P0_1)完全隔离。   

    我认为我的代码有问题、按下 S1和 S2时断点正确命中、按下 S2时达到 HAL_ISR_FUNCTION HAL_KEY_SW_6_PXIFG 和 HAL_KEY_SW_6_BIT 以及 按下 S1时 HAL_KEY_SW_7_PXIFG 和 HAL_KEY_SW_7_BIT。  

    在 HalKeyPoll 中会发生陌生人的行为。 对于每个按 S1或 S2按钮、按顺序到达 Button1和 Button 2、并导致键值不正确。 如下图所示:

    SW7 -点击-在我按下 S1后

    SW6 -点击-在我按下 S2后

    按下 S1或 S2时的 HalKeyPoll 行为

    SW7

    SW6

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HalKeyPoll 使用 HAL_push_BUTTONx 来确定引脚状态是否有效取决于确定的极性。  考虑到您的寄存器值和 hal_board_cfg.h 配置、我希望这两个值都能随时返回 true。  这可能是涉及 IAR 编译器优化的问题。  我建议使用 if else 语句来解决这个问题、或者完全无需轮询、只依赖于中断操作。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否附加 hal_key.c 以及您定义的“HAL_push_Button1”和 “HAL_push_Button2”?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我和大家一起探讨了 IAR 编译器的一些问题。

    我尝试使用中断寄存器作为解决方法、  n´t、在 hal_key.c 中、寄存器 HAL_KEY_SW_6_PXIFG 清除了该中断后、我进行了一些测试以对其进行注释并在 hallKeyPool 函数中包含清除过程、但我没有成功。  

    我还使用了 else 语句作为工作参数、但在这之后包含时、SW6或 SW7中断始终达到 Button1。

    if (HAL_push_Button1 ())

    键|= HAL_KEY_SW_6;

    }否则、如果(HAL_PUSE_BUTTON2())

    键|= HAL_KEY_SW_7;

    注意:我更改了 Sx 和 SWX 相关性、现在 S1触发 SW6、S2触发 SW7。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、YK 先生、当您请求我云时、您会看到附件 hal_key.c  

    注意:当我克隆 SW6代码行以包含 SW7时、我怀疑是否需要在  onboard.c (onboard_KeyCallback 函数)中克隆该行:

    Shift =(键和 HAL_KEY_SW_6)? true:false;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很遗憾,我目前没有任何进一步的建议。

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,黄先生。 我忘记了包含该文件!

    e2e.ti.com/.../2388.hal_5F00_key.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ryan、非常感谢。 ´ll,我按照我的承诺,完成了测试按钮的辅助硬件!

    关于 IAR 解决方案、您是否看到另一种在没有  HAL_KEY_SW_6_PXIFG 标志的情况下检查它的方法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的 hal_key.c 看起来不错。 您的 PUSH1_BV/PUSH1_SBIT 和 PUSH2_BV/PUSH2_SBIT 有何定义? 我建议您在设置断点并调试到"if (HAL_push_Button1 ())..."时使用示波器来监控 S1和 S2信号。 和"if (HAL_push_Button2 ())..." 在 KeyPol 中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yk 先生,

    关于 hal_board_cfg.h 中定义的按钮配置(PUSH1_BV/PUSH1_SBIT 和 PUSH2_BV/PUSH2_SBIT)、您可以在以下代码中看到:

    ´ll、我将为您提供有关按下 S1和 S2时在示波器中观察到的信号的更多详细信息。

    BR、 
    Alex
    /* ------------------------------------------------------------------------------------------------
     *                                    Push Button Configuration
     * ------------------------------------------------------------------------------------------------
     */
    
    #define ACTIVE_LOW        !
    #define ACTIVE_HIGH       !!    /* double negation forces result to be '1' */
    
    
    /* S1 */
    #define PUSH1_BV          BV(1)
    #define PUSH1_SBIT        P0_1
    #define PUSH1_POLARITY    ACTIVE_HIGH
    
    /* S2 */
    #define PUSH2_BV          BV(4)
    #define PUSH2_SBIT        P0_4
    #define PUSH2_POLARITY    ACTIVE_HIGH
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的(PUSH1_BV/PUSH1_SBIT 和 PUSH2_BV/PUSH2_SBIT)定义看起来不错。 接下来、您应该使用示波器来检查信号并对其进行调试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    黄先生。

    我使用我的定制板和 SmartRF05 BB 进行了测试、我在 HalKeyPoll 中看到了同样的效果或行为、正如我 在 sush_Button1和 push_Button2)被感应触发之前所说的那样。 我预先馈送了我的定制板、并通过 SmartRF05 BB 使用示波器。

    我看不出什么电气行为可以解释主要问题!  

    如您所见:

    SmartRF05 BB -范围定义和测量。

    不连接 SOC GPIO 引脚时的 S1和 S2示波器测量(P0_1和 P0_4)

     连接 SOC GPIO 引脚(P0_1和 P0_4)时的 S1和 S2示波器测量

    S1已按下- 在到达 KeyPoll 断点期间观察到

    S2按下-  在到达 KeyPoll 断点期间观察到

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试在 key_pollt 函数中的"if (HAL_push_Button1 ())"和"if (HAL_push_Button2 ())"上设置断点。 然后、按下 S1或 S2来检查观察窗口中的 P0_1和 P0_4的值、同时检查示波器上的 P0.1和 P0.4引脚来查看这两个引脚上的电压电平及其读数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yk 先生。

    正如您告诉我的 那样、我在 if (HAL_push_Button1 ()))和 if (HAL_push_Button2 ())上设置了断点、并看到此时 P0_1和 P0_4保持显示值= 1 (活动状态)。 甚至我按下两个按钮。  

    请、您能不能告诉我导致 P0_1/P0_4始终存在值1的原因是什么?

     

     HAL_push_Button1 ()/HAL_push_Button2 ()和 P0_1/P0_4状态上的断点-按下 S1或 S2:

    按下 S1 - HAL_PUSH_Button1 ()/HAL_PUSH_Button2 ()断点期间的电气信号

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    调试时、您能否检查 P0SEL 和 P0DIR 的值?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yk 先生,  

    我在断点期间获得 P0SEL 和 P0DIR 状态、正如您请求的那样。 此外、我还根据我的应用文件包含端口激活。  

    端口激活设置-应用程序文件  

        App profile 1 - EndPoint 1
    	
        P0SEL &= (~BV(0)); // LED GREEN CIRC. 1
        P1SEL &= (~BV(4)); // RELAY CIRC. 1 
        P0DIR |= (BV(0)); 
        P1DIR |= (BV(4)); 
    
    
    	App profile 2 - EndPoint 2
    	
    	P0SEL &= (~BV(5)); // LED GREEN CIRC 2
        P1SEL &= (~BV(5)|BV(6)); // RELAY CIRC 2 and RESET SWITCH
    	P0DIR |= (BV(5)); 
    	P1DIR |= (BV(5)|BV(6)); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么 、在调试时、P0SEL 和 P0DIR 的值是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉,黄先生,我以前不能通过 PIC,我不知道插入文件为什么不能用于我。

    断点前的 P0SEL&P0DIR  

    达到断点后 P0SEL&P0DIR。

    BR、

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您应检查为什么将 P0SEL 的位4设置为1。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ´、我尝试在代码中找到为什么 SELP0_4设置为1、但我没有 找到任何解释。 你有什么想法吗?

    您能看到我尝试查找的波纹图片。

    BR、

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以尝试调试步骤。 在钥匙初始化之前和之后执行 Y 步骤、以查看 P0SEL 的更改位置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    黄先生

    如您所知、我已逐步对密钥初始化进行调试设置、并在 MT UART Inicialization 过程中找到以 P0SEL_4开头的代码行、具体位置为  PxOUT &=~HAL_UART_Px_RTS (流控制)。

    我按照以下步骤找到它:

    hal_key.c



    OSAL.c
    OSAL_INIT_SYSTEM

    OSAL_AchZ0004.c
    mt_taskInit( taskID++);

    mt_task.c
    MT_UartInit();
    void MT_UartInit ()
    if (config->FlowControl)(如果(配置->流控制))
    PxOUT &=~HAL_UART_Px_RTS

    Yk 先生、请告诉我、如何在不破坏 UART 通信的情况下更改此行为?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现在使用 P0.4禁用流量控制。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yk 先生:

    非常感谢您的帮助!

    我注释了流量控制程序、 P0SEL_4从 零变为一秒、正如您在下面看到的、但我仍然可以双选 HallKeyPoll 上的按钮1和按钮2。 我n´t 找不到任何解释。  

    注:

    很抱歉、我之前关于该位置的错误信息、它是从 hal_UART.c 调用的、位于 _hal_UART_dma.c

    _hal_UART_dma.c
    HalUARTOpenDMA
    if (config->FlowControl)(如果(配置->流控制))

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于 P0_1和 P0_4的值都为1、因此查看这两个 if 语句是否已命中是正常的。 由于您将 S1和 S2都设置为高电平有效、因此您应该检查硬件以了解为何您只按 S1、但 S1和 S2都变为高 电平。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    黄先生

    我一开始从器件更改为 SmartRF05 BB、以不包括其他变量!

    在您上次发布后、我将 PUSH1_POLICITY 和 PUSH2_POLICITY 从 ACTIVE_HIGH 更改为  ACTIVE_LOW、然后 点击两个语句(按钮1和按钮2)、抱歉、在您建议如何修复 P0SEL_4之后、我的错误出现在这里、仅在我双击按钮时运行!

    您是否已经知道并知道为什么只有当我双击按钮时才会点击这些陈述?

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    可能是由于按钮去抖。 如果您尝试更长时间地按按钮、是否只需按一次即可按一下?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yk 先生! 我´m 快乐!

    很棒,现在一切都在运作!

    关于双击、我修复了它将 HAL_KEY_SW_X_EDGE 表单 HAL_KEY_RISING _EDGE 更改为  HAL_KEY_FALLING_EDGE

    考虑到我的配置条件、我只想总结一下所有更改、以备将来查询:

    -注释掉 _hal_UART_dma.c 上的流控制、以修复始终处于活动状态(高级)的 P0SEL_4

    -确保 在 PUSHX_POLICITY 上 正确使用了键状态配置,在我的例子中是 ACTIVE_LOW

    -确保在  HAL_KEY_SW_X_EDGE 中正确使用密钥事务信号、在我的案例 中为 HAL_KEY_FALLING_EDGE

    非常感谢!!!!

    你是最好的!!!

    BR、

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴知道它现在起作用了。 请帮助将此主题标记为已回答。 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你,黄先生。