库函数中,如何在主函数中 按键一次开启外部中断, 在按一次,关闭外部中断。虚心请教,谢谢

2019-10-12 14:48发布

请问具体操作,是在主函数中如何操作呢?尤其是关闭 外部中断,为什么每次开了外部中断后就关不上了。
void EXTIX_Init(void)
{
 
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  // KEY_Init(); 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 


    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
 EXTI_ClearITPendingBit(EXTI_Line2); 

EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_InitStructure.EXTI_Line=EXTI_Line2; 
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
 
  EXTI_Init(&EXTI_InitStructure); 

 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
  NVIC_Init(&NVIC_InitStructure);


 
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
only轮滑
1楼-- · 2019-10-12 19:21
#define CLI()      __set_PRIMASK(1) /*关闭总中断 */  
#define SEI() __set_PRIMASK(0) /* 开启总中断*/ 


只需在你的按键程序中选择他们就可以了
烟酒不沾
2楼-- · 2019-10-12 19:51
EXTI_InitStructure.EXTI_LineCmd =  DISABLE;
 EXTI_Init(&EXTI_InitStructure);
烟酒不沾
3楼-- · 2019-10-12 22:49
还有就是把外部中断的时钟关了,你试试行不行,我也没有用过!
正点原子
4楼-- · 2019-10-13 00:41
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-10-13 03:32
sunshine.lyw 发表于 2017-3-2 11:32
这个方法是可行的吗?
我一直想用这个,但是没有实际例子

建议你操作寄存器,那就非常简单了。。。
wmaxwell
6楼-- · 2019-10-13 07:11
楼上说的都是可行的方案,
前提是,这个案件你不能用中断方式驱动,得不断的通过CPU来读取有没有按下。
原因是,如果把外部中断关了,就不能触发中断来打开了

一周热门 更多>