中断配置和分析

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


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);
	
	
}

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);
}


---

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值