你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32同时处理四个按键中断的问题

[复制链接]
电小龙 提问时间:2016-9-21 15:47 /
在开发板上有四个按键,我四个按键处理都是用中断方式来处理的。烧进板子之后发现只有最高级的按键反应是灵敏的,每次按都会有串口输出,其他三个按键很迟钝,而且这几个按键随机乱按之后还会出现死机的情况,不知道是为什么?麻烦知道的帮小弟解决一下,不胜感激。。。按键回调函数代码如下
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\n");
      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\n");
      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\n");
      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\n");
      while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==1);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(KEY2_Pin);
  }
}

收藏 1 评论7 发布时间:2016-9-21 15:47

举报

7个回答
电小龙 回答时间:2016-9-21 15:48:14
其中KEY_UP的中断优先级最高,代码中的printf内容拷贝时显示出来问题,但是不影响看代码吧
电小龙 回答时间:2016-9-21 16:02:07
在线等大神帮忙解决。。。
废鱼 回答时间:2016-9-21 17:10:00
while(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1);
为什么要在这里死等呢?
电小龙 回答时间:2016-9-21 17:44:58
安 发表于 2016-9-21 17:10
while(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1);
为什么要在这里死等呢?

我是等待它松开。我刚刚看见你说的这里联想到了,KEY_UP和KEY0,KEY1,KEY2不同,后面这三个按键是按下为低电平,前面那个按下为高电平。要把后面的读取值等于0就好了。还是谢谢大神,这么细心的为每位解答。。。
电小龙 回答时间:2016-9-21 17:49:58
安 发表于 2016-9-21 17:10
while(HAL_GPIO_ReadPin(KEY_UP_GPIO_Port,KEY_UP_Pin)==1);
为什么要在这里死等呢?

我刚改了试了,就是这个问题,高低电平弄反了
eefishing 回答时间:2016-10-2 15:23:06
乱码了
五哥1 回答时间:2017-2-28 12:24:30
注意看手册,PA0是高电平有效。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版