STM32同时处理四个按键中断有三个按键很迟钝

2019-07-14 14:12发布

开发板上有四个按键,我四个按键处理都是用中断方式来处理的。烧进板子之后发现只有最高级的按键反应是灵敏的,每次按都会有串口输出,其他三个按键很迟钝,而且这几个按键随机乱按之后还会出现死机的情况,不知道是为什么?麻烦知道的帮小弟解决一下,不胜感激。。。按键回调函数代码如下
void HAL_GPIO_EXti_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==KEY_UP_Pin)
  {
    HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */
    if(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1)
    {
      printf("°´ÏµļüÊÇKEY_UP ");
      while(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(KEY_UP_Pin);
  }

  if(GPIO_Pin==KEY0_Pin)
  {
    HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */
    if(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==1)
    {
      printf("°´ÏµļüÊÇKEY0 ");
      while(HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin)==1);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(KEY0_Pin);
  }

  if(GPIO_Pin==KEY1_Pin)
  {
    HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */
    if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==1)
    {
      printf("°´ÏµļüÊÇKEY1 ");
      while(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==1);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(KEY1_Pin);
  }

  if(GPIO_Pin==KEY2_Pin)
  {
    HAL_Delay(20);/* ÑÓʱһС¶Îʱ¼ä£¬Ïû³ý¶¶¶¯ */
    if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==1)
    {
      printf("°´ÏµļüÊÇKEY2 ");
      while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==1);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(KEY2_Pin);
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。