tag 标签: exti

相关帖子
相关博文
  • 热度 16
    2013-4-7 17:31
    4181 次阅读|
    3 个评论
      使用GPIO作为中断源,即EXTI,在程序中通过以下步骤实现: 1. 使能EXTIx线的时钟和第二功能AFIO时钟。    //本实验中使用PB0作为EXTI输入    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);    GPIO被配置成EXTI输入,是复用功能,所以要将AFIO时钟打开。   2. 配置EXTIx中断优先级。    NVIC_Configuration();    这是通过配置NVIC(Nested Vector Interrupt Controller)来实现,其实就是通过对NVIC的初始化(NVIC_Init())。    static void NVIC_Configuration(void)    {      NVIC_InitTypeDef NVIC_InitStructure;         /* Configure one bit for preemption priority */      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);         /* 配置P 0为中断源 */      NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;      NVIC_Init(NVIC_InitStructure);    }   对NVIC初始化就是定义并填充一个NVIC_InitTypeDef类型的结构体。   typedef struct   {     uint8_t NVIC_IRQChannel;     uint8_t NVIC_IRQChannelPreemptionPriority;     uint8_t NVIC_IRQChannelSubPriority;     FunctionalState NVIC_IRQChannelCmd;   } NVIC_InitTypeDef;    由NVIC_IRQChannel成员来选择要配置的中断向量,由NVIC_IRQChannelPreemptionPriority来配置中断的抢占优先级,由NVIC_IRQChannelSubPriority来配置中断的响应优先级,由NVIC_IRQChannelCmd来打开(使能,ENABLE)或关闭(DISABLE)该中断。关于两种中断优先级的问题,可以参考后面野火的参考文档。   3. 配置EXTI中断IO.   首先这是一个GPIO,要先进行如下配置   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 上拉输入   GPIO_Init(GPIOB, GPIO_InitStructure);   再进行中断配置   GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);    EXTI_InitStructure.EXTI_Line = EXTI_Line0;   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断   EXTI_InitStructure.EXTI_LineCmd = ENABLE;   EXTI_Init(EXTI_InitStructure);    4. 编写中断服务程序。在这里是通过接在PB0上的按键来控制接在PB5上的LED亮灭。   参考文档和代码
相关资源