stm32外部中断

2023-11-09

目录

1. STM32的外部中断线

2.NVIC嵌套向量中断器

3.外部中断、事件控制器(EXTI):

4.STM32CubeMX配置外部中断:


1.外部中断是什么

想象一个场景:你在家里玩游戏,这时候突然来电话了。这时你会停止玩游戏去接电话,电话打完再放下电话继续玩。这一个过程就体现了中断的思想。我们抽象一下,把自己想象成一个单片机系统,玩游戏就是正在执行的主任务,如果没有外界干扰,这个系统会一直执行当前的主任务。而当外部有改变(电话响了)的时候,系统会第一时间响应,从主任务跳转到这个紧急任务中,这个突发的事件就是(外部)中断,而系统处理的紧急任务则是中断处理函数。当紧急任务(接电话)完毕之后,系统又会回到最初的主任务中。

这就是对中断的简单描述。

定义: 专业说法:中断指的是计算机运行中,正在运行事情被打断,需要紧急处理中断是指一个突发事件,中止了CPU当前的工作,转而处理突发事件,处理完成后再回到当前的工作继续执行。

STM32允许多种多样的中断,如外部IO、ADC、USART、I2C、RTC、USB、PVD等

1. STM32的外部中断线

  • STM32的每个IO都可以作为外部中断输入。

  • STM32的中断控制器支持19(20)个外部中断/事件请求:

EXTI0~15:对应外部IO口的输入中断。

EXTI16:连接到PVD输出。

EXTI17:连接到RTC闹钟事件。

EXTI18:连接到USB唤醒事件。

EXTI19 以太网唤醒事件(只适用互联型)

每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO 作为 EXTI 的输入源,

EXTI0 可以通过 AFIO 的外部中断配置寄存1(AFIO_EXTICR1) 的 EXTI0[3:0] 位选择配置为 PA0、PB0、PC0、PD0、PE0、PF0、PG0、PH0 或者 PI0。

STM32供IO使用的中断线只有16个,但是STM32F10x系列的IO口多达上百个,STM32F103ZET6(112),STM32F103RCT6(51),那么中断线怎么跟IO口对应上呢?下图就是STM32的外部中断线和IO口的对应关系:

 

2.NVIC嵌套向量中断器

嵌套向量中断控制器;用于为中断分组,从而分配抢占优先级和响应优先级;只要有中断就必须配置NVIC相关函数。从core_cm3.c及core_cm3.h和misc.c及misc.h中配置NVIC。 ​ 对于NVIC,其重要知识点就是优先级分组(抢占优先级)和子优先级(响应优先级),STM32F1XX和STM32F4XX都只使用了8位寄存器的高四位[7:4] 在这里插入图片描述(1).抢占优先级和响应优先级的联系和区别(重要原则): ​ 1.高优先级的抢占优先级可以打断正在进行的低抢占优先级中断的

2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断

3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪一个的响应优先级高,哪个先执行

4.如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行哪个中断

先占优先级也就是抢占优先级,概念等同于51单片机中的中断。假设有两中断先后触发,已经在执行的中断先占优先级如果没有后触发的中断 先占优先级更高,就会先处理先占优先级高的中断。也就是说又有较高的先占优先级的中断可以打断先占优先级较低的中断。这是实现中断嵌套的基础。 次占优先级,也就是响应优先级,只在同一先占优先级的中断同时触发时起作用,先占优先级相同,则优先执行次占优先级较高的中断。次占优先级不会造成中断嵌套。 如果中断的两个优先级都一致,则优先执行位于中断向量表中位置较高的中断。

下面两张图分别为分组:

在这里插入图片描述

 

NVIC代码配置:

NVIC代码配置: 一、配置分组: NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);//上面有分组状态 二、NVIC初始化: NVIC_InitTypeDef NVIC_InitStruct; //定义结构体变量 NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn; //中断线选择中断源 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //使能中断 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2; //抢占优先级 2 NVIC_InitStruct.NVIC_IRQChannelSubPriority=2; //子优先级(响应优先级) 2 NVIC_Init(& NVIC_InitStruct);

外部中断、事件控制器(EXTI):

STM32F1支持将所有GPIO设置为中断输入。外部IO可由上沿、下沿、高低电平的三种方式触发。可选择中断或事件触发。

 

中断开启过程:

主要过程:中断——分组——具体中断设置到组里面 1.在RCC里将要使用的IO口时钟和复位时钟打开 2.在GPIO里将该IO口映射到相对应的外部中断 3.在NVIC里将该中断通道打开

EXTI库函数:

EXTI Delnit 将外设EXTI寄存器 设为缺省值 EXTI Init 根据EXTIInitStruct中指定的参数初始化外设EXTI寄存器 EXTI_Structlnit 把 EXTIInitStruct中的每一个参数按缺省值填入 EXTI GenerateSWInterrupt 产生一个软件中断 EXTI_GetFlagStatus 检查指定的EXTI线路标志位设置与否 EXTI_ClearFlag 清除 EXTI 线路挂起标志位 EXTI GetlTStatus 检查指定的EXTI线路触发请求发生与否 EXTI_ClearlTPendingBit 清除EXTI线路挂起位

STM32CubeMX配置外部中断:

基础配置在这里就不讲解了 ,想了解的请看我的上节文章,里面有详细的介绍;

  • 1 搜索芯片型号

  • 2选择芯片

  • 3创建工程

  • GPIO_EXIT的6种模式

  •  

    External Interrupt Mode with Rising edge trigger detection

    上升沿触发外部中断

    Extenal Interrupt Mode with Falling edge trigger detection

    下降沿触发外部中断

    External Interrupt Mode with Rising/Falling edge trigger detection

    上升/下降沿触发外部中断

    Extenal Event Mode with Rising edge trigger detection

    上升沿触发外部事件

    Extermal Event Mode with Falling edge trigger detection

    下降沿触发外部事件

    External Event Mode with Rising/Falling edge trigger detection

    上升沿/下降沿触发外部事件

    根据自己的需要选择

     

    不用选择 默认就好。

    设置NVIC(嵌套向量中断控制器)

    img

    • 1点击NVIC2 勾选EXIT Line

    • 2 interrupt 和 EXIT Line[15:10] interrupt 使能中断

    • 根据前面所讲的 配置你想要的抢占优先级和响应优先级,(不配置也行)

      然后再进行时钟树的配置,以及项目文件的设置,这些在上一次的文章中都有写到,如果不会的话,请大家移步到上一次的文章。

      ok,现在cubeMX的配置就到这里 ,然后点击生成工程文件,随后我们可以在stm32f1xx_it.c中看到我们所配置的中断服务函数

       

      这里有一个HAL_GPIO_EXTI_IRQHandler();函数

      点击右键 Go To Definition 查看一下函数代码

       

      和我们库函数配置差不多,就是清除中断标志位,之后进入中断回调函数

      在HAL库中,中断运行结束后不会立刻退出,而是会先进入相对应的中断回调函数,处理该函数中的代码之后,才会退出中断,所以在HAL库中我们一般将中断需要处理代码放在中断回调函数中。

      好了,这就是全部内容了。谢谢大家的观看!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32外部中断 的相关文章

  • 【深度学习】生成对抗网络

    下文以图片作为数据举例介绍 生成网络 生成器 gt 以假乱真 生成网络的职责是把随机点模仿成与真实数据集相似的图片 这些随机点是从一个潜在空间中随机抽取的 它可以看作一个实现 点对点变换 的映射 而真实图像在图像空间中的分布十分复杂 简单的
  • 破解windows7系统密码

    theme smartblue 一 利用5次shift漏洞破解win7密码 1 1 漏洞 1 在未登录系统时 连续按5次shift键 弹出程序c windows system32 sethc exe 2 部分win7及win10系统在未进入
  • MAX232无RS232电平信号输出、MAX232/3232硬件设计电路、电荷泵电容、max3221电路

    调试MAX3221芯片过程中 经测试 电路的单片机的uart可以正常收发数据 可无论单片机怎么发送数据 max3221都没有输出RS232电平的信号 看了论坛上的留言 正常的RS232电路中 芯片 V V 引脚电压应该为一倍多将近两倍的Vc

随机推荐

  • 银行家算法例题

    银行家算法 Banker s Algorithm 是一个避免死锁 Deadlock 的著名算法 是由艾兹格 迪杰斯特拉在1965年为T H E系统设计的一种避免死锁产生的算法 它以银行借贷系统的分配策略为基础 判断并保证系统的安全运行 目录
  • 【PTA】乙级 前世档案

    前世档案 C语言 题干 大致思路 题干 大致思路 n个问题 m个玩家 所以共有2的次方种结果 对应第一个图中的树状图 先考虑一个玩家的回答 用s统计最后结果的序号 先让结果数num除以2 如果为y 则不做处理 如果为n 则令s num 依次
  • short s1 = 1;s1 =s1+1;有错而short s1 = 1; s1+=1正确,为何?

    s1 s1 1和s1 1是有区别的 s1 s1 1会错因为s1是short 而1是int 所以运算时会自动转换为int 再将int赋值给s1是需要强制转换 所以会错 JAVA规范上说e1 e2 实际上是 e1 T1 e1 e2 其中T1是e
  • STM32读取编码器数据(STM32-1)

    编码器 encoder 是将信号或数据进行编制 转换为可用以通讯 传输和存储的信号形式的设备 按照外形可以分为实心轴和空心轴 按照工作原理编码器可分为增量式和绝对式两类 增量式编码器是将位移转换成周期性的电信号 再把这个电信号转变成计数脉冲
  • 补码的基础知识

    数在计算机中如何表示 举例来说 8在计算机中表示为二进制的1000 那么 8怎么表示呢 很容易想到 可以将一个二进制位 bit 专门规定为符号位 它等于0时就表示正数 等于1时就表示负数 比如 在8位机中 规定每个字节的最高位为符号位 那么
  • 使用TensorFlow实现LSTM

    使用TensorFlow实现LSTM 使用Cell实现 以Cell方式实现LSTM import os import numpy as np import tensorflow as tf from tensorflow import ke
  • Ubuntu 配置第三方动态库的系统环境变量

    环境 ubuntu16 04 Qt5 7 1 简述 将第三方动态库配置到系统环境变量中 便于使用 步骤 1 将第三方动态库的头文件及 so 文件拷贝到桌面 RSAInclude文件夹 lib文件夹 2 进入桌面文件夹 打开命令框 3 输入命
  • PHP上传Excel-xls-xlsx

    PHP上传Excel xls格式和xlsx格式 PHPExcle插件 引入插件 require once assets PHPExcel 1 8 Classes PHPExcel php 视图层代码
  • 安装TomCat的艰辛历程

    学习Java的初级阶段 是个充满无奈与呵呵的时间 就安装一个TomCat我就安装了一晚上 还没有成功 所以我给我的 捉猫泪史 写个传 以免后来者重蹈覆辙 首先 安装TomCat之前 先将Java环境搭好 就是下载并安装Java develo
  • Porter-Duff compositing rules

    1984 年 7 月 计算机图形 杂志 18 期 253 259 页 刊登了Porter Thomas 和 Duff Tom 的论文 Compositing Digital Ima ges 文中讲述了12个合成规则 这些规则都是基于一些简单
  • Windows编程基础--第12节 MFC之树控件CTreeCtrl

    树形控件 Tree Control 用来显示一系列项目的层次关系 最典型的例子是显示磁盘上的文件与文件夹 如果有子项目的话 单击树形控件中的项目可以展开或者收缩其子项目 MFC提供了CTreeCtrl类进行支持 树控件在windows程序中
  • 如何评价2023美赛春季赛YZ题加赛 大学生数学建模

    作为之前数模国奖美赛F的选手 这次得空会更新下今年美赛相关的免费思路 并给出直播答疑 欢迎蹲坑 欢迎一起交流 将在本帖更新2023美国大学生数学建模数模美赛各个赛题思路 大家可以点赞收藏 一 参赛报名 组队参赛 每队人数3人 专业不限 二
  • tf.name_scope和tf.variable_scope的用法

    文章目录 tf get variable 和 tf variable tf get variable 和 tf variable scope tf variable scope 和 tf name scope tf get variable
  • java 异常 错误_有关JAVA异常和错误(ERROR)的处理

    异常的处理主要包括捕获异常 程序流程的跳转和异常处理语句块的定义等 当一个异常被抛出时 应该有专门的语句来捕获这个被抛出的异常对象 这个过程被称为捕获异常 当一个异常类的对象被捕获后 用户程序就会发生流程的跳转 系统中止当前的流程而跳转至专
  • 【毕设选题】最新51单片机毕业设计项目集合 - 500例

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 4 最后 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下
  • Java对文件的基本操作(查找、读取)

    1 读取目录下的所有文件 隐藏的文件一网打尽 快速定位要找的那个文件 查询路径下的所有文件 param path 路径 private static void find String path File file new File path
  • 使用DatagramSocket发送、接收数据(1)

    Java使用DatagramSocket代表UDP协议的Socket DatagramSocket本身只是码头 不维护状态 不能产生IO流 它的唯一作用就是接收和发送数据报 Java使用DatagramPacket来代表数据报 Datagr
  • 给 Typora 改个背景颜色

    因为白色 在多云天气的时候 看上去有的扎眼 所以就想修改一下颜色 但本地的主题 不好看 所以就想简简单单换一个颜色 网上有很多 自定义主题的文章 我懒 只想改背景颜色 不想弄那么多的操作 换成这种颜色 就是好看 哈哈哈 操作 在 typor
  • 清华大学LightGrad-TTS,且流式实现

    论文链接 https arxiv org abs 2308 16569 代码地址 https github com thuhcsi LightGrad 数据支持 针对BZNSYP和LJSpeech提供训练脚本 针对Grad TTS提出两个问
  • stm32外部中断

    目录 1 STM32的外部中断线 2 NVIC嵌套向量中断器 3 外部中断 事件控制器 EXTI 4 STM32CubeMX配置外部中断 1 外部中断是什么 想象一个场景 你在家里玩游戏 这时候突然来电话了 这时你会停止玩游戏去接电话 电话