【江科大】STM32:中断系统(理论)

文章目录

  • 中断系统
    • 为什么要使用中断
    • 中断优先级
    • 中断嵌套
    • STM32的中断系统
    • 如何管理这些中断
      • NVIC的结构![请添加图片描述](https://img-blog.csdnimg.cn/c77b038fd63a4ddfbcd3b86f6dfe596b.png)
    • 优先级
    • 窗口看门狗(WWDG):
    • 外部中断模块的特性:(EXIT)
      • 下图是一些常用的中断类型
    • 中断向量表的作用:
    • EXTI(Extern Interrupt)外部中断
    • AFIO

中断系统

为什么要使用中断

如果没有中断系统,系统就需要不断去查询程序运行是否有异常和异常事件的产生, 比如串口通信,数据没有接收到被覆盖。没有定时器中断,主程序只能靠Delay函数,才能实现定时功能。
有的话,就不用管这些,只需要放心去做自己的事情。有中断就去处理。

中断优先级

当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源.

中断嵌套

当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

STM32的中断系统

68个可屏蔽中断通道,8个中断源,F1系列最多的中断数量,包含EXTI(外部中断)、TIM(定时器)、ADC(模数转换器)、USART(串口)、SPI、I2C、RTC(实施时钟)等多个外设

如何管理这些中断

NVIC(嵌套向量中断控制器)
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级
STM32的中断非常多,如果全都接在CPU,CPU旧的引出很多线来适配,设计起来很麻烦,并且如果出现很多中断同时申请,就会产生拥堵。毕竟CPU是用来运算的。
因此出于以上原因,中断分配就会放到别的地方,NVIC就出现了
NVIC由很多输入口,不管有多少中断线路,都能接过来。
但是只有一个输出口,因此根据每个中断优先级分配中断的先后顺序。
下图就是NVIC的结构:

NVIC的结构请添加图片描述

白8.:通过这个输出口就告诉CPU,该处理哪个中断,而CPU不管什么顺序来的,只管处理

  • NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
  • 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队
    在这里插入图片描述

优先级

NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级
抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队(0是最高优先级)

窗口看门狗(WWDG):

功能:检查程序运行状态

外部中断模块的特性:(EXIT)

对于STM32来说,想要获取的信号是外部驱动的换开的突发信号,比如旋转编码器的输出信号,我可能很久不拧他,这时也不要STM32做什么,但是我一拧就会有很多脉冲波形需要STM32来接收,这个信号是突发的,外部驱动,stm32只能被动接受,且很快,只要晚一点读取就会错过很多波形。因此就考虑外部中断,有脉冲过来,STM32立即进去中断函数处理,没有脉冲,32就专心做其他事情。
比如红外遥控接收头的输出,接收到遥控输出,就会输出一段波形,转瞬即逝,所以需要外部中断读取,
最后还有按键。也是外部驱动突发事件,但是不推荐外部中断,因为不好处理抖动和松手检测的问题。输出也不是转瞬即逝。定时器中断读取。

下图是一些常用的中断类型

请添加图片描述
请添加图片描述
了解中断向量表主要是为了,了解中断函数的作用原理。

中断向量表的作用:

程序中的中断函数,它的地址都是由编译器来分配的,是不固定的。
为了让硬件能够跳转到一个不固定的中断函数里,
就需要内存中定义一个地址的列表这个列表地址是固定的,
中断发生后,就跳到这个固定位置。,然后在这个固定位置由编译器,再加上一条跳转到中断函数的代码。这样中断跳转就可以跳转到任意位置了。
中断地址的列表又叫中断向量表,相当于中断跳转的一个跳板。
使用C语言就不用管。

EXTI(Extern Interrupt)外部中断

  • EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
  • 支持的触发方式:上升沿/下降沿/双边沿/软件触发
  • 支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
  • 通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
  • 触发响应方式:
    中断响应(电平引脚发生变化,发生中断)/事件响应(触发事件,那么外部信号就不会通信CPU,而是通向其他外设,用来触发其他外设的操作,如触发ADC转换,DMA等)(不会触发中断,而是触发别的外设操作。)
    请添加图片描述
    由于引脚可能存在冲突,因此需要利用AFIO来打开你想要的I/O口的你想使用的,STM32硬件设计时设计好的功能。

AFIO

功能:AFIO复用IO口,AFIO主要用于引脚复用功能的选择和重定义
在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

//AFIO的配置全会被清除
void GPIO_AFIODeInit(void);
//锁定某个配置好的引脚,防止意外更改
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//可以进行引脚重映射,第一个参数时重映射方式,第二个时新的状态
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
//配置AFIO的数据选择器
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
//和以太网有关
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

在这里插入图片描述
上面就是关于STM32中断部分的一些理论笔记。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Python数据分析技术栈》第06章使用 Pandas 准备数据 04 DataFrames

04 DataFrames 《Python数据分析技术栈》第06章使用 Pandas 准备数据 04 DataFrames A DataFrame is an extension of a Series. It is a two-dimensional data structure for storing data. While the Series object contains two components - a set of values, and index …

MySQL语句 | FIELD()与ORDER BY()相结合实现对结果的自定义排序

在MySQL中,可将FIELD()与ORDER BY()结合使用,实现对查询结果的自定义规则排序。 举个通用的例子 假设有一个名为your_table的表,包含名为your_column的列,希望按照列your_column的值的特定顺序进行排序: SELECT * F…

从0开始学C++ 第二十八课 数据结构深入 - 栈和队列

第二十八课:数据结构深入 - 栈和队列 学习目标: 理解栈(Stack)的基本概念和特性。掌握队列(Queue)的基本概念和特性。学会在C中使用栈和队列。了解栈和队列的典型应用场景。 学习内容: 栈&am…

前后端分离项目中实现图形验证码

图形验证码在我们的日常生活中时经常用到的,一般用于用户的登录、注册等。 图形验证码在互联网应用中的作用是提高安全性、防止滥用和保护用户隐私。它是一种简单而有效的人机验证技术,帮助保护系统和用户免受自动化攻击的影响。 本次我们通过spring b…

损失函数是指什么

损失函数(Loss Function)是用来衡量模型预测输出与实际目标之间差异的函数。在机器学习和深度学习中,损失函数是模型训练的关键部分。其目标是通过最小化损失函数来使模型的预测尽可能接近实际的标签或目标值。 在监督学习中,模型…

跟着野火学FreeRTOS:第二段(队列管理)

队列( Q u e u e s Queues Queues)是 F r e e R T O S FreeRTOS FreeRTOS中的一种数据结构,这种数据结构提供了一种任务和任务之间,任务和中断之间的通信机制。队列可以存储一定有限数量的固定大小( u x I t e m S i z…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序,可让针对不同应用程序和观众,以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置,以便导出与特定交付媒体兼容的文件,可以按适合多种设备的格式导出视频&am…

漫漫数学之旅010

文章目录 经典格言数学习题古今评注科学家小传(一)艾伦凯(二)托马斯C黑尔斯 经典格言 计算机的归宿是融入我们的生活,就像其它一切我们习以为常的东西:手表、纸、铅笔和衣服,我们不再把它们看作…

Hbas简介:数据模型和概念、物理视图

文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容,仅供学习…

maven pom中的内置变量及引用

目录 前言内置变量引用 前言 maven其实有很多内置变量供开发着在开发中使用,比如说basedir这变量,它指的是pom.xml文件所在的目录,下面我们一起来认识一下。 内置变量 变量名作用说明basedir 、project.basedir项目的根目录即包含 pom.xml 文…

Gen AI大潮来袭!8个Salesforce新岗位,你会选择哪个?

人工智能席卷全球,企业对如何整合GenAI有着浓厚的兴趣。为启动企业的GenAI转型浪潮,Salesforce宣布与埃森哲和德勤建立合作伙伴关系,并计划推出更多支持项目。 目前,Salesforce领域的其他咨询公司正在提高员工技能,以…

C++之类型定义

# define QT_PREPEND_NAMESPACE(name) ::name template <class T> struct QIntegerForSizeof: QIntegerForSize<sizeof(T)> { }; typedef QIntegerForSizeof<void*>::Unsigned quintptr; typedef QT_PREPEND_NAMESPACE(quintptr) WId; WId winid; ​ 这段代…

笨蛋学设计模式行为型模式-状态模式【20】

行为型模式-状态模式 8.7状态模式8.7.1概念8.7.2场景8.7.3优势 / 劣势8.7.4状态模式可分为8.7.5状态模式8.7.6实战8.7.6.1题目描述8.7.6.2输入描述8.7.6.3输出描述8.7.6.4代码 8.7.7总结 8.7状态模式 8.7.1概念 ​ 状态模式是指对象在运行时可以根据内部状态的不同而改变它们…

Apache Zeppelin结合Apache Airflow使用1

Apache Zeppelin结合Apache Airflow使用1 文章目录 Apache Zeppelin结合Apache Airflow使用1前言一、安装Airflow二、使用步骤1.目标2.编写DAG2.加载、执行DAG 总结 前言 之前学了Zeppelin的使用&#xff0c;今天开始结合Airflow串任务。 Apache Airflow和Apache Zeppelin是两…

C语言数据结构(3)——线性表其二(单链表)

欢迎来到博主的专栏——C语言数据结构 博主id&#xff1a;代码小豪 文章目录 单链表不连续存储的线性表单链表单链表的结构头指针单链表的操作打印单链表 空链表单链表的插入尾插法 头插法 单链表的查找任意位置处的节点插入单链表节点的删除 销毁链表 单链表 顺序表是一个物…

万字长文详解Java线程池面试题

王有志&#xff0c;一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群&#xff1a;共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章&#xff0c;我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源&#xff1a; 大部分来自于各机构&#xff08;J…

【K8S】Kubernetes 中滚动发布由浅入深实战

目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…

Asp.net core 框架入门

概述 appsettings.json&#xff1a;配置文件&#xff0c;数据库连接字符串配置信息 Program.cs&#xff1a;程序入口文件&#xff08;里面有个Main方法&#xff09; Startup.cs&#xff1a;启动配置文件 依赖项&#xff1a;管理项目所依赖的第三方组件的安装&#xff0c;配…

WampServer

开发笔记 推荐链接php无法保存SESSION问题部署SSL时候产生的问题 推荐链接 链接目录 php无法保存SESSION问题 php.ini文件和phpForApache.ini 文件 里面都有 对路径的控制&#xff0c;相关路径问题可能也需要进行修改&#xff0c;打开文件搜索wamp64或wamp 就可以看到了&…

“深入理解RabbitMQ交换机的原理与应用“

深入理解RabbitMQ交换机的原理与应用 引言1. RabbitMQ交换机简介介绍1.1 什么是RabbitMQ&#xff1f;1.1.1 消息中间件的作用1.1.2 RabbitMQ的特点和优势 1.2 RabbitMQ的基本概念1.2.1 队列1.2.2 交换机1.2.3 路由键 1.3 交换机的作用和分类1.3.1 直连交换机&#xff08;direct…