当前位置:   article > 正文

中断配置和分析

中断配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


stm32 EXIT(中断)配置及应用分析

前言

中断在单片机是必学的内容,我们谈谈应用的地方和什么场景该用。

1.人们都说的突发事件,当我们正在进行什么事情时,外部发进来的信号或指令。(列如:吃饭时,突然的电话,接完电话继续吃饭)。
中断产生都是被某信号或指令打断然后执行中断内的内容。
(个人看法,用什么思路我们可以共同交流)
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、中断是什么?

中断:执行事情时突然发生的指令,当实行完这件指令后我们继续执行原来的事情。(重指令打断的地方开始继续下面的)

二、使用步骤

1.中断初始化配置

这里用来两个不同外接电压的按键来分别触发两个中断
分别配置了他们的优先级
代码如下(示例):

void EXIT_NVIC_Init()
{
	NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);					//AFIO将每个引脚映射在中断上(由引脚产生中断必须配置次函数)
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
	
	//中断优先处理配置
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

					
	//配置中断优先级
	NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;				//中断源(那个引脚)
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;	//抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;	//响应级
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;		//使能
	NVIC_Init(&NVIC_InitStructure);
	
	
	NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;				//中断源
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;	//抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;	//响应级
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;		//使能
	NVIC_Init(&NVIC_InitStructure);
	
	
	
	
	//配置外部中断引脚。外接高电压
	EXTI_InitStructure.EXTI_Line=EXTI_Line0;		//外部中断引脚映射
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;	//选择触发方式(事件EXTI_Mode_Event|中断EXTI_Mode_Interrupt)
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;	//什么研触发(上升EXTI_Trigger_Rising|下降EXTI_Trigger_Falling|边沿EXTI_Trigger_Rising_Falling)(上升就是0-1,下降就是1-0的过程)
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;				//使能
	EXTI_Init(&EXTI_InitStructure);		
	
	//外接地
	EXTI_InitStructure.EXTI_Line=EXTI_Line3;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

2.中断产生执行函数

代码如下(示例):


void EXTI0_IRQHandler()
{
	if(EXTI_GetITStatus(EXTI0_IRQn)==1)	//判断是否误产生中断
	{
		Delay(20);
		if(EXTI_GetITStatus(EXTI0_IRQn)==1)	//因为我的是按键触发所以怕误操作而进行了消抖
		{
			
		}
	}
	EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志位(为了跳出中断了回到主程序和为下一次触发中断做准备)
}

void EXTI3_IRQHandler()
{
	if(EXTI_GetITStatus(EXTI3_IRQn)==1)
	{
		Delay(20);
		if(EXTI_GetITStatus(EXTI3_IRQn)==1)										
		{
			
		}
	}
	EXTI_ClearITPendingBit(EXTI_Line3);
}


---

# 总结
配置中断是我们都应该配置下中断优先级养成良好的习惯

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/973196
推荐阅读
相关标签
  

闽ICP备14008679号