如何在外部中断执行后立即关闭外部中断,当需要时又可重新启动

2019-07-20 22:17发布

当程序运行到设置的标志处,启动外部中断,当外部中断执行后立即关闭外部中断。关闭后又不影响下次需要时外部中断的启动。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
碧霄长博
1楼-- · 2019-07-21 04:16
用了这种方去实现。每次需要时执行EXTI4_Init(ENABLE);
改动代码如下:
#include "exti.h"


void EXTI4_Init(FunctionalState NewState)
{
   EXTI_InitTypeDef   EXTI_InitStructure;
   NVIC_InitTypeDef   NVIC_InitStructure;
   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);       
   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource4);
       
  EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = NewState;
  EXTI_Init(&EXTI_InitStructure);
         
  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
   
}

void EXTI4_IRQHandler(void)
{
   EXTI_ClearITPendingBit(EXTI_Line4);
   EXTI4_Init(DISABLE);                 
}       
止天
2楼-- · 2019-07-21 07:18
        EXTI->IMR &= ~(0x0001<<3);  //关闭3线

一周热门 更多>