[STM32F1] 中断优先级的问题

[复制链接]
917|7
 楼主| houcs 发表于 2015-9-29 21:04 | 显示全部楼层 |阅读模式

[size=11.818181991577148px]stm32程序中两个中断一个是串口中断另一个是红外触发中断
[size=11.818181991577148px]  串口中断函数
[size=11.818181991577148px]       void NVIC_Configuration1(void)
[size=11.818181991577148px]{
[size=11.818181991577148px]        NVIC_InitTypeDef NVIC_InitStructure;
[size=11.818181991577148px]        /* Configure the NVIC Preemption Priority Bits */  
[size=11.818181991577148px]        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
[size=11.818181991577148px]        
[size=11.818181991577148px]        /* Enable the USARTy Interrupt */
[size=11.818181991577148px]        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;         
[size=11.818181991577148px]        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
[size=11.818181991577148px]        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
[size=11.818181991577148px]        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
[size=11.818181991577148px]        NVIC_Init(&NVIC_InitStructure);
}

红外接收中断
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  
  /* ÅäÖÃP[A|B|C|D|E]11ΪÖжÏÔ´ */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
红外线的触发中断优先级大于 串口的啊?怎么红外的触发不好使呢
PS:当串口配置
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
这俩句取消之后,红外线的中断就可以这是什么原因呢, 有需要怎么设置呢,
请教下各位
liuzaiy 发表于 2015-9-29 21:04 | 显示全部楼层
红外与串口硬件部分冲突了吧
 楼主| houcs 发表于 2015-9-29 21:04 | 显示全部楼层
改成串口1,与这俩句无关。
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
但是我吧中断的串口中断优先级改为
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;         
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
而红外的的中断改为
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
也不响应,哪里出错了呢
liuzaiy 发表于 2015-9-29 21:05 | 显示全部楼层
串口中断都关了也不响应吗?
 楼主| houcs 发表于 2015-9-29 21:05 | 显示全部楼层
我把TM2, 串口2(后改的),红外中断
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);                                               //1组抢占优先级
TIM 2           抢占优先为0 ,相应优先为1
红外中断     抢占优先为0 ,相应优先为0
串口2         抢占优先为1,相应优先为2
但是红外 中断没反应
可是还把串口2的
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
这两句屏蔽就能相应红外中断,我想不明白,  不像是优先级设置的问题,

ousj 发表于 2015-9-29 21:06 | 显示全部楼层
试过不管串口2的优先级比红外的高于低
 楼主| houcs 发表于 2015-9-29 21:06 | 显示全部楼层
试过,没用
芙蓉洞 发表于 2015-9-29 21:58 | 显示全部楼层
红外与串口硬件部分冲突?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部