stm32外部中断的配置

f427外部中断的配置

void User_Exit_Init()
{
	   GPIO_InitTypeDef GPIO_InitStructure;   //定义引脚的结构体
	   EXTI_InitTypeDef EXTI_InitStructure;   //定义中断的结构体
	   NVIC_InitTypeDef NVIC_InitStructure;  //定义NVIC的结构体
	   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//打开GPIOA的时钟
		//设置引脚
	   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	  //设置引脚为输入模式
	   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;	    		
	  //设置引脚为不上拉也不下拉
	   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	  //初始化按键
	   GPIO_Init(GPIOA, &GPIO_InitStructure); 
		//设置对应的中断源 对应到GPIOA 的0号引脚
	   SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
	   //配置中断源   哪个引脚就对应几号中断原
	   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
	  //配置为中断模式
  	   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 	 //配置为上升沿
 	   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
	  //使能外部中断
   	 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  	 //初始化中断
 	 EXTI_Init(&EXTI_InitStructure);
  
	  /* 配置中断信号 几号中断就对应几号的中断信号EXT**x**_IRQn 
			但是对于引脚5到9  对应的为 EXTI9_5_IRQn
			10到15 对应的为EXTI15_10_IRQn
	*/
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  	/* 设置主优先级 */
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
 	 /* 设置子优先级 */
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
 	 /* 设置中中断使能 */
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//初始化NVIC
  	NVIC_Init(&NVIC_InitStructure);	
}
void EXTI0_IRQHandler()
{
	/*中断需要处理的事情*/;
}

需要在main函数中设置中断优先组

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

F103的中断配置

void UserExitInit()
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure; 

	/*打开GPIOA的时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
										
	/* 配置引脚 */	
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    /* 设置为浮空输入*/	
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

	/*选择中断信号*/
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); 
    EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;
	
	/* 设置为中断模式*/
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	/* 设置为上升沿中断*/
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    /*使能中断*/	
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
	//设置中断信号
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  	/* 设置主优先级 */
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
 	 /* 设置子优先级 */
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
 	 /* 设置中中断使能 */
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//初始化NVIC
  	NVIC_Init(&NVIC_InitStructure);	
 }
 void EXTI0_IRQHandler()
{
	/*中断需要处理的事情*/;
}

同样也需要在main函数中设置中断优先级
在f4和f1中的尾部中断基本完全相同 只有设置中断信号原的函数有点不同在f1中直接就在gpio.c文件中就有GPIO_EXTILineConfig()
而在f4中的SYSCFG_EXTILineConfig()在stm32f4xx_syscfg.c中

发布了6 篇原创文章 · 获赞 1 · 访问量 495

猜你喜欢

转载自blog.csdn.net/flq1997/article/details/104280902