STM32外部中断

来源:互联网 发布:pcb编程工装夹具 编辑:程序博客网 时间:2024/05/29 15:27

STM32每个引脚都可以作为外部中断使用,

1、代码

外部中断初始化程序:

//外部中断服务程序void EXTI_Config(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource, uint32_t EXTI_Line, uint8_t NVIC_IRQChannel){    GPIO_InitTypeDef  GPIO_InitStructure;    EXTI_InitTypeDef EXTI_InitStructure;    NVIC_InitTypeDef NVIC_InitStructure;    //使能时钟    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //使能复用功能时钟    //GPIO Structure    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_4;             //PB5    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //Set Frequency 50MHz       GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU ;         //上拉输入    GPIO_Init(GPIOE, &GPIO_InitStructure);     //【中断端口、中断线】以及【中断初始化配置】,下降沿触发    GPIO_EXTILineConfig(GPIO_PortSource, GPIO_PinSource);    EXTI_InitStructure.EXTI_Line    = EXTI_Line;    EXTI_InitStructure.EXTI_Mode    = EXTI_Mode_Interrupt;      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;    EXTI_InitStructure.EXTI_LineCmd = ENABLE;    EXTI_Init(&EXTI_InitStructure);     //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器    //NVIC初始化配置    NVIC_InitStructure.NVIC_IRQChannel = NVIC_IRQChannel;           //使能PA15的外部中断通道    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;    //抢占优先级1,     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;           //子优先级3    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                 //使能外部中断通道    NVIC_Init(&NVIC_InitStructure);     //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器}

外部中断处理程序

u8 ifconfig = 0;    //全局变量,中断发生标志,进入中断以后将该位置1//外部中断4服务程序 void EXTI4_IRQHandler(void){    mydelay(10);//消抖    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0)//确认按下    {        ifconfig = 1;    }    EXTI_ClearITPendingBit(EXTI_Line4); //清除LINE15上的中断标志位  }
原创粉丝点击