stm32HAL实现按键组合

我想要用HAL库实现两个按键同时按下时,输出端的GPIO口置低电平。
使用的中断回调,但功能实现只能在一个按键按下时实现,两个不行。


void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)             
{
      if (GPIO_PIN_6==GPIO_PIN_RESET && GPIO_PIN_7==GPIO_PIN_RESET)         //主要想知道怎么实现这条语句,
{
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET) ; 
    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET) ;
  
}

结果是当我同时按下两个IO口对应的按键时,无现象发生。

可以通过使用标志位(flags)来实现。 当一个按钮按下时,设置一个标志位;当另一个按钮按下时,检测是否前一个按钮的标志位被设置,如果已经被设置,那么将输出口置低电平;否则,不做任何改变。

  • 文章:使用HAL库开发STM32:GPIO口基础使用与外部中断 中也许有你想要的答案,请看下吧
  • 除此之外, 这篇博客: STM32低功耗模式下GPIO如何配置最节能?中的 4、避免悬空未使用的引脚 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 进入低功耗模式时,所有引脚信号必须连接到VDD或接地。

    如果GPIO连接到外部接收器(外部元件输入),则必须使用PP或PU/PD强制GPIO信号值。

    当GPIO连接到驱动器(外部元件输出或总线)时,驱动器必须提供有效电平(VDD 或接地)。如果未定义驱动器电平,则必须使用PU/PD强制GPIO上的信号。出于实际原因,当GPIO是运行模式下的输入(模拟或数字)时,在低功耗模式下使用输入
    PU/PD可能更容易;当GPIO是运行模式下的输出时,则使用输出PP。这可以避免在进入或退出停止模式时管理更改。

     将不常用的GPIO配置为高电平,例程如下所示(LL库):

      LL_GPIO_SetOutputPin(GPIOA,LL_GPIO_PIN_ALL);
      LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_ALL);

    拓展学习:嵌入式系统降低功耗的设计技术