打印
[STM32F1]

中断优先级的问题

[复制链接]
736|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 | 只看该作者
串口中断都关了也不响应吗?

使用特权

评论回复
5
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);
这两句屏蔽就能相应红外中断,我想不明白,  不像是优先级设置的问题,

使用特权

评论回复
6
ousj| | 2015-9-29 21:06 | 只看该作者
试过不管串口2的优先级比红外的高于低

使用特权

评论回复
7
houcs|  楼主 | 2015-9-29 21:06 | 只看该作者
试过,没用

使用特权

评论回复
8
芙蓉洞| | 2015-9-29 21:58 | 只看该作者
红外与串口硬件部分冲突?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝