一、中断

  由于某个事件的发生,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. MongoDB 启动报错

    1.配置MongoDB ls /etc/mongod.conf 可以根据此配置文件启动 或者根据自己需求进行配置文件的变更 重要提醒: 如果变更MongoDB配置文件中:日志与数据文件目录,那么要把这 ...

  2. Response Assertion(响应断言)

    Response Assertion(响应断言) 响应断言是对服务器的响应数据进行规则匹配. Name(名称):可以随意设置,最好有业务意义. Comments(注释):可以随意设置,可以为空. Ap ...

  3. 【数论】[涨姿势:同余]P2312解方程

    题目描述 已知多项式方程:\(a_0 + a_1x + a_2x^2+...+a_nx^n = 0\) 求这个方程在[1,m]内的整数解 \(1\leq n\leq100,|a_i|\leq 10^{ ...

  4. jQuery获取各种标签的文本和value值

    <select id="test"> <option value ="volvo">Volvo</option> <o ...

  5. Excel 截取字符,判断县区 城市。

    https://jingyan.baidu.com/article/624e7459aa90e434e8ba5a8a.html https://jingyan.baidu.com/article/9f ...

  6. ubuntu笔记2-误删dpkg的/var/lib/dpkg/info文件夹

    由于误删了dpkg的/var/lib/dpkg/info文件夹,导致安装文件的时候报错 错误提示:E: Sub-process /usr/bin/dpkg returned an error code ...

  7. layui上传文件组件(前后端代码实现)

    我个人博客系统上传特色图片功能就是用layui上传文件组件做的.另外采用某个生态框架,尽量都统一用该生态框架对应的解决方案,因为这样一来,有这么几个好处?1.统一而不杂糅,有利于制定相应的编码规范,方 ...

  8. 根据motif binding来确定target gene | HOMER | FIMO | MEME

    主流的motif数据库 JASPAR dbcorrdb - SCENIC使用的 TRANSFAC® 7.0 Public 2005 and TRANSCompel 7.0 Public 2005 - ...

  9. Spring Boot-JPA、Hibernate、Spring data jpa之间的关系

    什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...

  10. linux pip

    $ wget https://bootstrap.pypa.io/get-pip.py$ python get-pip.py$ pip -V #查看pip版本 接下来就可以随便pip安装东西了 首先查 ...