STM32M4 EXTI

来源:互联网 发布:淘宝怎么看宝贝权重 编辑:程序博客网 时间:2024/04/30 10:30
void MCU_extiInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA
     |RCC_AHB1Periph_GPIOB
     |RCC_AHB1Periph_GPIOC
     |RCC_AHB1Periph_GPIOD

     |RCC_AHB1Periph_GPIOE,ENABLE);


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   //暂时定为上拉输入。 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(GPIOD, &GPIO_InitStructure);


    /**********************************外部输入中断配置***********************************/
    /* 指定外部中断源设置 */
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource15);  
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource8);  
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource9);   
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource10);   


    
    /* 上/下沿同时触发 */
    EXTI_InitStructure.EXTI_Line = EXTI_Line8 | EXTI_Line9 | EXTI_Line10;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;         //下降沿触发。
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    EXTI_InitStructure.EXTI_Line = EXTI_Line15;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
    
    EXTI_ClearFlag(EXTI_Line8); 
    EXTI_ClearFlag(EXTI_Line9);
    EXTI_ClearFlag(EXTI_Line10); 
    EXTI_ClearFlag(EXTI_Line15);


    /* 配置嵌套中断向量 优先级*/
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;          //暂时把这四个中断配置为一样的优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ;
    NVIC_Init(&NVIC_InitStructure);


    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_Init(&NVIC_InitStructure);

}


外部中断服务程序

void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line10) != RESET)
    {        
        EXTI_ClearITPendingBit(EXTI_Line10);

//do something
    }

}

0 0
原创粉丝点击