中断5-9里面有多个中断怎么判断呢

2019-10-14 22:28发布

void EXTI9_5_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line6)!=RESET)                //判断中断6是否发生
        {①}
        if(EXTI_GetITStatus(EXTI_Line8)!=RESET)                //判断中断8是否发生
        {②}
}
这样子能分辨中断5-9里面具体是6还是8中断吗,中断6触发会运行②吗,实验现象好像相互影响了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
沧海
1楼-- · 2019-10-16 15:41
 精彩回答 2  元偷偷看……
我是路人甲
2楼-- · 2019-10-16 19:47
沧海 发表于 2017-2-28 13:12
EXTI_GetFlagStatus这个函数

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)
{
  ITStatus bitstatus = RESET;
  uint32_t enablestatus = 0;
  /* Check the parameters */
  assert_param(IS_GET_EXTI_LINE(EXTI_Line));
  
  enablestatus =  EXTI->IMR & EXTI_Line;
  if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET))
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}
EXTI_GetFlagStatus这个函数是??我好想没有用这个吧
我是路人甲
3楼-- · 2019-10-16 22:38
沧海 发表于 2017-2-28 13:12
EXTI_GetFlagStatus这个函数

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)
{
  FlagStatus bitstatus = RESET;
  /* Check the parameters */
  assert_param(IS_GET_EXTI_LINE(EXTI_Line));
  
  if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET)
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}
我是路人甲
4楼-- · 2019-10-17 01:01
我是路人甲 发表于 2017-2-28 14:13
终于弄好了
在中断初始化里面加了一句EXTI->PR = 0;

反复测试终于找到问题了,一开始程序就是对的。有两块板,一块能行,另一块老混乱,估计PCB线或者焊接混起了
正点原子
5楼-- · 2019-10-17 03:52
我是路人甲 发表于 2017-2-28 09:27
再请问下,需要清除哪些标记呢

所有标志,你直接对PR赋值为0,试试

一周热门 更多>