当前位置: 首页 > news >正文

【stm32】EXTI外部中断

EXTI外部中断

中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

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

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

在这里插入图片描述
在这里插入图片描述

STM32中断

68个可屏蔽中断通道,包含EXTI外部中断、TIM定时器、ADC模数转换器、USART串口、SPI通信、I2C通信、RTC实时时钟等多个外设

使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级
在这里插入图片描述
在这里插入图片描述

灰色部分为内核中断,其余为STM32外设中断
程序中的中断函数,地址是由编译器来分配的,不固定,但中断跳转,由于硬件的限制,只能跳到固定的地址执行程序,因此就需要在内存中定义一个地址的列表,列表地址是固定的,中断发生后,就跳到这个固定位置,在这个固定位置,由编译器,再加上一条跳转到中断函数的代码,这样中断函数就可以跳到任意位置,这个中断地址的列表,就叫中断向量表

NVIC(嵌套中断向量控制器)基本结构

统一分配中断优先级和管理中断,是一个内核外设,CPU的小助手

在这里插入图片描述

/n的意思是:一个外设可能同时会占用多个中断通道,所以有n条线
NVIC只有一个输出口,NVIC根据每个中断的优先级分配中断的先后顺序,然后通过右边这一个输出口告诉CPU应该处理哪个中断

NVIC优先级分级

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

EXTI外部中断

EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
支持的触发方式:上升沿/下降沿/双边沿/软件触发
支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
其中16个GPIO_Pin是外部中断的主要功能,后四个是来“蹭网”的,因为外部中断有一个功能,是从低功耗模式的停止模式下唤醒STM32,对PVD电源电压监测,当电源从电压过低恢复时,需要PVD借助一下外部中断退出停止模式;对于RTC闹钟,有时为了省电,RTC定一个闹钟后,STM32会进入停止模式,等到闹钟响的时候在唤醒,这也需要借助外部中断
触发响应方式:中断响应/事件响应
事件响应:当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,但在STM32中,也可以选择触发一个事件,如果选择触发事件,那外部中断的信号就不会通向CPU,而是通向其他外设,用来出发其他外设的操作,如ADC转换,触发DMA

基本结构

在这里插入图片描述
过程描述:每个GPIO外设有16个引脚,所以进来16根线,但EXTI模块只有16个GPIO通道,但这里每个GPIO外设都有16个引脚,如果每个引脚都占用一个通道,EXTI的16个通道就不够用,所以会有一个AFIO中断引脚选择的电路模块,AFIO是数据选择器,可以在前面GPIO外设的16个引脚里选择其中一个连接到后面的EXTI通道里(即PA0,PB0,PC0只能要求其中一个连接到EXTI的通道0上),通过AFIO选择之后的16个通道,接到EXTI边沿检测及控制电路上,同时下面四个“蹭网”的外设也是并列接进来的,加起来就组成了EXTI的20个输入信号,经过EXTI电路之后,分为两种输出,上面接到NVIC,用来触发中断(9~ 5,15~10分到一个通道里,各触发一个中断函数,需要再根据标志位来区分到底是哪个中断进来的),下面20条输出线路到其他外设,用来触发其他外设操作,即事件响应

AFIO复用IO口

在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
在这里插入图片描述

EXTI框图

在这里插入图片描述

过程描述:从20根输入线开始,输入线首先进入边沿检测电路,在上面的上升沿触发选择寄存器和下降沿触发选择寄存器选择其一或者都,接着触发信号进入或门的输入端,或门可以有多个输入,但只能有一个输出,执行或的逻辑,即在输入端,只要有一个是高电平1,输出的就是高电平1,输入的值为硬件触发和软件中断寄存器的值。经过或门后,分为两路,上一路触发中断,下一路触发事件,触发中断首先会置一个挂起寄存器,相当于一个中断标志位,我们可以读取这个寄存器判断的是哪个通道触发的中断,如果中断挂起寄存器置1,就会继续向左走,和中断屏蔽寄存器共同进入一个与门,然后至NVIC中断控制器,这里与门为开关作用,因为1于上任意数都等于任意数,0于任意数都等于0,即中断屏蔽寄存器给1,另一个输入就直接输出,也就是允许中断,中断屏蔽寄存器给0,另一个输入无论是什么,输出都为0,相当于屏蔽了这个中断;触发事件首先也是一个事件屏蔽寄存器进行开关控制,最后通过一个脉冲发射器,到其他外设,脉冲发射器就是给一个电平脉冲,用来触发其他外设的动作
20/即表示是20根线,代表20个通道

旋转编码器

旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向
类型:机械触点式/霍尔传感器式/光栅式

在这里插入图片描述
图一:
最简单的编码器样式,使用的是对射式红外传感器来测速,为了测速,还需要配合一个光栅编码盘,当编码盘转动时,红外传感器的红外光就会出现遮挡,透过,遮挡,透过的现象,对应模块输出的电平就是高低电平交替的方波,方波的个数表示转过的角度,方波的频率表示转速,这样就可以用外部中断捕获方波的边沿,以此判断位置和速度。
但这个模块只有一路输出,正转反转输出波形没法区分,所以只能测位置和速度,不能测量旋转方向

图二三:
内部是用金属触点进行通断,是一种机械触点式编码器,在旋转时,依次接通和断开两边触点,正转和反转输出的方波信号相位差为90,正交波形,可以测方向

图四:
为直接附在电机后面的编码器,为霍尔传感器形式编码器,中间是一个圆形磁铁,边上有两个错开的霍尔传感器,当磁铁旋转时,通过霍尔传感器,就可以输出正交的方波信号

图五:
独立的编码器元件,输入轴转动时,输出就会有波形,可以测速和方向

图二图三这种一般用来进行调节,比如调节音量,因为它是触点接触的形式,所以不适合电机这种高速旋转的地方,另外几种都为非接触的形式,可用来电机测速

硬件电路

在这里插入图片描述
在这里插入图片描述
注;本文来源为江协b站课程,为笔记

http://www.dtcms.com/a/326434.html

相关文章:

  • QT聊天项目DAY18
  • Prompt Engineering 最佳实践:让AI输出更精准的核心技巧
  • HIS系统:医院信息化建设的核心,采用Angular+Java技术栈,集成MySQL、Redis等技术,实现医院全业务流程管理。
  • LS1043A+AQR115C万兆网口调试
  • 机器学习第九课之DBSCAN算法
  • 下一代防火墙组网全解析
  • Linux下安装jdk
  • 从零构建企业级K8S:高可用集群部署指南
  • 简单了解MongoDB数据存储
  • 计算机网络---交换机
  • Excel导入mysql,带小数点如何解决?
  • 物联网通讯协议-MQTT、Modbus、OPC
  • 支持向量机SM
  • 人工智能-python-机器学习-线性回归与梯度下降:理论与实践
  • 大屏幕自适应
  • 基于FPGA的热电偶测温数据采集系统,替代NI的产品(三)测试
  • C++ STL | STL迭代器(lterator)
  • 阿里千问系列:Qwen3 强化学习新算法GSPO!
  • HTML应用指南:利用GET请求获取全国一加授权零售店位置信息
  • 机器学习逻辑回归实战
  • 【Lua】题目小练10
  • computed使用的方式
  • 【Lua】XLua加载lua文件
  • xlsxio全平台(x86、arm32、arm64 )编译、测试,使用编译脚本10分钟快速编译!
  • redis常见的性能问题
  • 游戏盾是什么?
  • Qwen Code CLI在Windows上的安装与环境配置问题解决
  • 金蝶云星辰:赋能企业数据管理
  • 开发指南130-实体类的主键生成策略
  • 达梦数据库慢SQL日志收集和分析