一、中断

  由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序。该程序执行完成后,CPU接着执行被暂停的程序。这个过程称为中断。(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家吃饭,回家途中,发现泥鳅没带,回去把泥鳅带回家,然后吃完饭继续捉泥鳅!!!)

  中断是CPU处理外部突发事件的一个重要技术。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以分为硬件中断和软件中断两大类,有了中断,系统可以更好更快的利用有限的系统资源解决系统响应速度和运行效率的一种控制技术。它的作用就是可以使你的电脑系统运行更快更平稳。

  一方面,有了中断功能,系统就可以使CPU和外设同时工作,使系统可以及时的响应外部事件。而且有了中断功能,CPU可以允许多个外设同时工作。这样就大大提高了CPU的利用率,也提高了数据输入、输出速度。另一方面,有了中断功能,就可以使CPU及时处理各种软硬件故障。计算机在运行过程中,往往会出现事先预料不到的情况或出现一些故障,如电源掉电,存储出错,运算溢出等等。计算机可以利用中断处理系统自行处理,而不必停机或报告工作人员。

  1、硬件中断根据来源的位置分为:

    内部中断(不可屏蔽中断):少数,中断源在CPU的内部,如突然掉电,奇偶校验错、除数为0、运算溢出、单步中断(软件调试时可以使用,每执行一条指令,就中断一次)等

    外部中断(可屏蔽中断):多数,中断源在CPU的外部,一般是指由计算机外设发出的中断请求,如键盘中断、打印机中断、定时器中断。可以使用中断控制器屏蔽外部设备的中断。

  2、是否可屏蔽分为:

    可屏蔽中断

    不可屏蔽中断

  3、中断来源:

    软件中断

    硬件中断

二、中断与事件

 概念:

  事件:是表示检测到某一动作(电平边缘)触发事件发生了,由硬件自动完成的触发到产生结果的通道解决(响应速度快)。

  中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中,需要CPU接入(响应速度慢)。

 区别:

  中断有可能被更优先的中断屏蔽,事件不会;事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒);事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号;事件是中断的触发源,事件可以触发中断,也可以不触发,开放了对应的中断屏蔽位,则事件可以触发相应的中断。事件还是其它一些操作的触发源,比如DMA(Direct Memory Access,直接存储器存取),还有TIM中影子寄存器的传递与更新。

  简言之,中断一定要有中断服务函数,中断必须要CPU介入,但是事件却没有对应的函数。事件可以在不需要CPU干预的情况下,执行某些操作,事件机制提供了一个完全由硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法;

三、实验内容

  实验中按下按键0触发中断线4,抢占优先级2,子优先级为2,中断反应函数EXTI4_IRQHandler(),控制LED0和LED1的状态取反

  1、初始化IO口为输入                                              KEY_Init();

  2、开启AFIO时钟                                                    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

  3、设置IO口与中断线的映射关系                                 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);

  4、初始化线上中断,设置触发条件等                          EXTI_Init(&KST_EXTI_Structure);

  5、配置中断分组(NVIC),并使能中断                     NVIC_Init(&KST_NVIC_Structure);

  6、编写中断服务函数              EXTI4_IRQHandler();

  7、清除中断服务函数              EXTI_ClearITPendingBit(EXTI_Line4);

 #include "exti.h"
#include "key.h"
#include "led.h"
#include "beep.h"
#include "delay.h"
#include "usart.h" void EXTIX_Init(void)
{
EXTI_InitTypeDef KST_EXTI_Structure;
NVIC_InitTypeDef KST_NVIC_Structure; KEY_Init(); //按键初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能IO口复用时钟 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4); //设置IO口与中断线的映射关系 KST_EXTI_Structure.EXTI_Line = EXTI_Line4; //配置中断线4
KST_EXTI_Structure.EXTI_LineCmd = ENABLE; //使能
KST_EXTI_Structure.EXTI_Mode = EXTI_Mode_Interrupt; //外部中断
KST_EXTI_Structure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_Init(&KST_EXTI_Structure); //初始化线上中断,设置触发条件 KST_NVIC_Structure.NVIC_IRQChannel = EXTI4_IRQn;
KST_NVIC_Structure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
KST_NVIC_Structure.NVIC_IRQChannelPreemptionPriority = ;//抢占优先级2
KST_NVIC_Structure.NVIC_IRQChannelSubPriority = ; //子优先级2
NVIC_Init(&KST_NVIC_Structure); //中断优先级初始化 } void EXTI4_IRQHandler(void)
{
delay_ms();
if(KEY0==)
{
LED0 = !LED0;
LED1 = !LED1;
}
EXTI_ClearITPendingBit(EXTI_Line4); //手动清除中断线4的标志位
}

主函数

 

 #include "sys.h"
#include "exti.h"
#include "beep.h"
#include "key.h"
#include "delay.h"
#include "led.h"
#include "usart.h" int main()
{
delay_init();
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
BEEP_Init(); //蜂鸣器初始化
EXTIX_Init(); //外部中断初始化
uart_init(); //串口初始化
LED0 = ;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
while()
{
printf("OK\r\n");
delay_ms();
} }

  

  

    

嵌入式02 STM32 实验08 外部中断的更多相关文章

  1. 嵌入式02 STM32 实验10 定时器中断

    优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...

  2. 嵌入式02 STM32 实验11 NVIC和中断总结

    一.基础知识 1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 2.STM32只有84个中断,包括16个内核中断和68个可屏蔽中断 3.STM32F103上只有60个 ...

  3. 嵌入式02 STM32 实验07 串口通信

    STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中 ...

  4. 嵌入式02 STM32 实验06 按键

    按键实验和前面的跑马灯.蜂鸣器主要的区别就是这个是读取外部的输入信号,之前的实验都是对外部输出信号. 一.硬件设计 本实验的硬件为三个按键.两个lED(LED0.LED1).一个蜂鸣器(BEEP). ...

  5. 嵌入式02 STM32 实验05 蜂鸣器

    蜂鸣器:是一种一体化结构的电子讯响器.主要分为分压式蜂鸣器和电磁式蜂鸣器两种类型. 一.有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路) 1.有源蜂鸣器:有源蜂鸣器自带震荡电路,一通电就会 ...

  6. 嵌入式02 STM32 实验03 时钟系统

    时钟系统是处理器的核心,所以认真学习时钟系统是必要的,有助于深入理解STM32. 由于STM32的外设很多,有的外设不需要太高的时钟频率,同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也越弱,所以对 ...

  7. 嵌入式02 STM32 实验02 端口输入输出各4种模式

    GPIO(General-purpose input/output 通用目的输入/输出端口) 电压(A模拟量)与电平(D数字量) GPIO 8种工作模式(输入四种.输出四种) 1.GPIO_Mode_ ...

  8. 嵌入式02 STM32 实验01 端口复用和重映射

    内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  ...

  9. 嵌入式02 STM32 实验04跑马灯

    开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...

随机推荐

  1. VUE 基础配置

    原文:https://www.cnblogs.com/LearningOnline/p/9368838.html 1.安装Node.js等软件 报错: 解决: 原文:https://pdf-lib.o ...

  2. Django 基础篇(一)

    创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...

  3. HNOI2015总结

    // 此博文为迁移而来,写于2015年4月21日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vy9t.html 这次省 ...

  4. Tomcat8.x的安装与启动

    Tomcat是企业网站的服务器,大多都用于中.小型网站开发和学习开发JSP应用程序中.笔者也是开始学习,下面介绍Tomcat8.x的安装步骤. 进入Tomcat官网,点击左边的download目录下的 ...

  5. Shared Virtual Memory (SVM) Functions

    Description Shared Virtual Memory (SVM) (Glossary): An address space exposed to both the host and th ...

  6. JavaScript设计模式经典-面向对象中六大原则

    作者 | Jeskson来源 | 达达前端小酒馆 1 主要学习JavaScript中的六大原则.那么六大原则还记得是什么了吗?六大原则指:单一职责原则(SRP),开放封闭原则(OCP),里氏替换原则( ...

  7. JS 根据不同年份,获取不同月份的天数

    在做日期方面的需求时,需要考虑到大小月的问题  ##格式:new Date(year,month,0).getDate() new Date(2019,12,0).getDate() 可以在控制台打印 ...

  8. 【Gamma】Scrum Meeting 4 & 助教参会记录

    目录 前言 任务分配 燃尽图 会议照片 签入记录 上周助教交流总结 技术博客 一些说明 前言 第4次会议于5月29日22:00线上交流形式召开. 交流确认了各自的任务进度,并与助教进行了沟通.时长20 ...

  9. 【Gamma阶段】第一次Scrum Meeting

    冰多多团队-Gamma阶段第一次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 推广软件,发放调查问卷 修改可移动button以及button手感反馈优化,编辑器风格切换(夜间模式 ...

  10. VMware网络适配器

    VMware 提供的网络连接有 5 种,分别是"桥接模式"."NAT 模式"."仅主机模式"."自定义"和"L ...