赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
中断在单片机是必学的内容,我们谈谈应用的地方和什么场景该用。
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); }
代码如下(示例):
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); } --- # 总结 配置中断是我们都应该配置下中断优先级养成良好的习惯
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。