目录

一、中断的基本知识

1.什么是中断

2.中断的优先级

二、代码区

1.中断函数功能定义

2.按键功能定义

3.功能调用


一、中断的基本知识

接下来得内容我会从中断得原理,中断的配置,如何使用原理图,一步步走起,如果有同学先前已经学过中断的可以先跳,直接进入代码区。

1.什么是中断

中断就是当一个主程序正在执行时,遇到一个中断点 (好比一个闹钟)开始进行中断函数里面的内容,等在中断函数(或内容)跑完后,再重新回到主程序继续执行。通俗点 :就是你正在写作业,你的兄弟叫你上分,然后你放下作业开始上分,然后你的兄弟一直送,你打不下去了,又重新去写作业。

2.中断的优先级

为什么会有出现中断优先级这种现象呢?就是因为假如你一个主函数,它出现了两个中断,但两个中断呢,他又是同时发生,编译器或者系统,他就不知道哪一个中断先跑,所以这时候他就懵了,就好比说你两个老师都给你打电话,你都不知道该接谁的好。

这样的话,你就要分设置中断优先级设置中断优先级的话,它的这个优先级怎么分呢?

这时候我们讲抢占和响应优先级。

我们先来讲抢占,我再来接响应,什么是抢占,我安排设置一个数字,看来排序来看一下这个中断谁先谁后好,抢占值越小的,它就会越早去执行这个中断,就好比一组里面我从零开始012345,这样的话,零,他就是最小的,这样那样的话他抢占级别最高,在很多中断都存在的时候。这样的话就他先开始执行中断。

但是我如果设置了中断,有两个中断的优先级都是零,那怎么办?而且同时发生,那怎么办?这时候我们就是设置响应,响应是在抢占优先级相同的情况下发挥作用,实行响应,设置响应,谁的响应值设置的越小那它的响应越高,但记住响应是在抢占优先级相同且同时触发中断时,响应才会有作用。

(以组1为例)

这时候我们谈谈分组现象,就是简单的排序,就是每个组有不同的排序方法,选择不同组只是排序方法不同罢了,没啥区别。就像第零组他只有抢占位,没有响应,未响应为零,这样的话他执行什么抢占这样的话,就不存在那种嗯同时发生中断的情况下,谁去同时触发那个中断的时候两个都到时候谁先谁后的问题了,这样子存在,说谁先开始中断,没有那所谓的响应。
第一组的话,它是存在有一个响应位,这样的话他是怎么做呢?就是他先分三个排一下抢占的顺序,留一个为响应排;这样的话就留给可能发生一种现象,就是说中断同时发生,这时候呢。它就会执行响应,然后呢,响应越小的就越早去执行。

二、代码区

先进行功能模块的初始化使用。

1.中断函数功能定义

//exti.h
#ifndef __EXTI_H
#define __EXTI_H
#include "sys.h"      void EXTIX_Init(void);  //中断初始化声明
#endif

这个头文件,既可以防止编译器没有定义exti.h时补上内容又可以再已经有对应内容是规避它,不重复使用,防止报错。

#include "exti.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "beep.h"
//中断0
void EXTI0_IRQHandler(void)
{delay_ms(10);  //延迟消抖if(WK_UP==1)     {BEEP=!BEEP;  }        EXTI_ClearITPendingBit(EXTI_Line0); //清除标志位
}   void EXTIX_Init(void)
{NVIC_InitTypeDef   NVIC_InitStructure;EXTI_InitTypeDef   EXTI_InitStructure;KEY_Init(); //按键初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//时钟使能SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);//PA0 连接中断线0EXTI_InitStructure.EXTI_Line = EXTI_Line0;//LINE0EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//出发中断事件EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断通道使能EXTI_Init(&EXTI_InitStructure);//ÅäÖÃNVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//外部中断0NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//响应优先级2(或者子优先级2)NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道NVIC_Init(&NVIC_InitStructure);//配置}

使用按键要进行按键的消抖,防止接触不佳引发电平变化 不好,而在这里面有一个上升沿触发,这就要看你的对应的原理图。

你用的是按键,那就看按键的另一端是啥,存在高电平,就用上升沿,存在低电平就用下升。

2.按键功能定义

//key.h
#ifndef _KEY_H
#define _KEY_H
#include "sys.h"
typedef unsigned char u8;#define WK_UP PAin(0)
#define WK_UP_PRES 4void KEY_Init(void);
u8 KEY_Scan(u8 mode);#endif

这里假如不知道怎么配引脚可以在我之前的https://blog.csdn.net/weixin_51471186/article/details/118836090?spm=1001.2014.3001.5501看。

#include "key.h"
#include "sys.h"
#include "delay.h"void KEY_Init(void)
{GPIO_InitTypeDef GPIO_Initstructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);GPIO_Initstructure.GPIO_Pin=GPIO_Pin_0;GPIO_Initstructure.GPIO_PuPd=GPIO_PuPd_DOWN;GPIO_Init(GPIOA,&GPIO_Initstructure);}u8 KEY_Scan(u8 mode)
{if(key_up&&WK_UP==1) {delay_ms(10);if(WK_UP==1)return 4;}return 0;
}

3.功能调用

接着就是main.c主函数在那时调用初始化和使用它。

#include "sys.h"
#include "delay.h"
#include "usart.h"#include "beep.h"
#include "key.h"
#include "exti.h"int main(void)
{ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//选择优先级组别delay_init(168);    //延迟初始化BEEP_Init();        //蜂鸣器初始化EXTIX_Init();       //中断初始化while(1);
}

更多好料转载至http://blog.qmgua.com/?id=180

外部中断(含基础知识)-(做明白人)相关推荐

  1. 【STM32】STM32简述中断的基础知识

    中断 一.中断的定义 二.中断的作用 三.中断源(中断触发的硬件) 四.中断类型 五.中断优先级 六.中断服务函数 一.中断的定义 中断,即CPU在正常执行程序的过程中,遇到外部(IO引脚中断)/内部 ...

  2. stm32中断的基础知识

    文章目录 中断 中断的硬件实现 stm32的外部中断 HAL库的中断实现 外部中断的回调函数 使用外部中断检测按键(示例) 设置Cube外设 中断的代码理解 代码编写 参考资料 中断 某些事件可能需要 ...

  3. 计算机基础知识做网页,专业知识—计算机基础知识之网页制作 .doc

    网页的概念 网页是构成网站的基本元素,是承载各种网站应用的平台.网页是一个文件,它可以存放在世界某个角落的某一台计算机中,是万维网中的一"页",是超文本标记语言格式(标准通用标记语 ...

  4. 刚进入软件测试的行业,就我学习到的关于软件测试的基础知识做以下总结。...

    软件测试(实际输出与预期输出间的比较过程) 软件测试:描述一种用来促进鉴定软件的正确性.完整性.安全性和质量的过程.换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程.软件测试的经典定义 ...

  5. 网络安全基础知识入门!网络安全学习教程

    当我们学习网络安全的时候,需要对它的基础知识做一个简单的了解,这样对以后的学习和工作都会有很大的帮助.本篇文章为大家总结了网络安全基础知识入门的内容,快跟着小编来学习吧. 计算机网络 计算机网络是利用 ...

  6. 系统软件开发基础知识

    系统软件开发基础知识 最近最火的是孩子考了多少分,能上那个好大学,出现了我的大学的我的梦. 他们的大学他们的梦,我是啥,我的软件我的梦. 下面了解到的基础知识做一个归纳,本人了解这方面的知识点可能很片 ...

  7. python编程教程第九讲_Python入门学习视频,最全面讲解视频无偿分享,这些基础知识你都懂了吗?...

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  8. 如何开发一个用户脚本系列(2)——需要哪些基础知识

    本文原创首发于我的个人博客 一个贾程序员,文章原地址 点此 查看 在第一篇文章中,我对用户脚本进行了一些介绍,让大家对其有个大概的了解.在这篇文章中,我会对用户脚本开发过程中要用到的基础知识做一些介绍 ...

  9. STM32F1迷你板外部中断

    开始学习外部中断的基本知识 中断优先级分组管理 CortexM3内部支持256个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置.STM32F1系列有 8 ...

最新文章

  1. 海信计算机辅助统,海信计算机辅助手术系统将覆盖山东三级医院
  2. Egret3D初步笔记二 (Unity导出场景使用)
  3. 算法面试避坑指南,助你轻松应对Java面试
  4. mysql 历史记录查询
  5. Java中,成员内部类的常见修饰符及应用 成员内部类不是静态的,访问的格式...
  6. 通信原理教程chapter1
  7. 百度editor编辑器添加新字体
  8. JDR与JRE的区别
  9. JavaScript函数和BOM及DOM编程(详细总结-无尿点)
  10. win7系统安装VS 2019
  11. HP 1022N 网络打印机安装步骤
  12. Causality matters in medical imaging 文献解读
  13. 算法设计与分析: 1-4 金币阵列问题
  14. 算法第四版扔鸡蛋问题
  15. 基于深度学习的语音识别研究-CTC理论推导(四)
  16. c语言中abc是什么类型,ABC类什么意思
  17. 斥资建造全景分割养猪场,AI 养猪,到底靠不靠谱?
  18. windows找不到文件xxxxx请确定文件名是否正确 解决办法
  19. SAP-MM预制发票那些事
  20. DZ先生怪谈GAT1400之视图库协议保活

热门文章

  1. 详细的X-Scan使用教程
  2. CodeForces 44B- A - Cola- 分类讨论
  3. 分享一个安卓屏幕翻译软件
  4. mysql创建桌面快捷方式
  5. SPI驱动框架源码分析
  6. java视频上传与播放功能
  7. Unity Shader入门精要--第4 章 学习Shader 所需的数学基础
  8. m4s格式转换mp3_下载的mp3音频怎么转换wav格式
  9. FreeType2中文手册
  10. reactos 编译,安装篇