stm32外部中断丢失

2019-07-21 02:17发布

采用GPIO外部中断,大概70us就会中断一次,在主循环中有对中断函数中的变量进行判断,所以加了临界区保护,即加开关外部中断操作,
开始通过外部中断寄存器开关实现,即如下宏中的#esle,但发现会有一定几率丢失中断,而换成通过NVIC实现,即如下代码中的#if 1则正常。
可是再仔细查看各种资料,通过外部中断寄存器的方式应该也不会丢才对, 想不明白。 void  EXTI2_IRQ_enable(void)
{
 #if 1
 NVIC_InitTypeDef nvic_init;
 
 nvic_init.NVIC_IRQChannel = EXTI2_IRQn; 
 nvic_init.NVIC_IRQChannelPreemptionPriority = 0;
 nvic_init.NVIC_IRQChannelSubPriority = 0;
 nvic_init.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&nvic_init);
 #else//这种方法会丢中断;
 EXTI->IMR |= EXTI_Line2;
 #endif
} void  EXTI2_IRQ_disable(void)
{
 #if 1
 NVIC_InitTypeDef nvic_init;
 
 nvic_init.NVIC_IRQChannel = EXTI2_IRQn; 
 nvic_init.NVIC_IRQChannelPreemptionPriority = 0;
 nvic_init.NVIC_IRQChannelSubPriority = 0;
 nvic_init.NVIC_IRQChannelCmd = DISABLE;
 NVIC_Init(&nvic_init);
 #else//这种方法会丢中断;
 EXTI->IMR &= ~EXTI_Line2;  #endif
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。