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

第五章第一节 EXTI 外部中断

1. 中断系统

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

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

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

2. 中断执行流程

3. STM32 中断

① 68 个可屏蔽中断通道,包括 EXTI、TIM、ADC、USART、SPI、I2C、RTC 等外设

② 使用 NVIC 统一管理中断,每个中断通道都拥有 16 个可编程的优先级,可对优先级进行分组,进一步设置抢占优先级和响应优先级(NVIC 就是 stm32 用来管理中断,分配优先级的)

4. NVIC 基本结构(嵌套中断向量控制器,是一个内核外设,CPU 小助手)

5. NVIC 优先级分组

① NVIC 的中断优先级由优先级寄存器的 4 位(0-15)决定,这 4 位可以进行切分,分为高 n 位的抢占优先级和低 4-n 位的响应优先级(这里的优先级是值越小,优先级越高,0 就是最高优先级)

抢占优先级高的可以中断嵌套响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的中断号排队。

6. EXTI 外部中断(Extern Interrupt)

① EXTI 可以监测指定 GPIO 口的电平信号,当其指定的 GPIO 口产生电平变化时,EXTI 将立即向 NVIC 发出中断申请,经过 NVIC 裁决后即可中断 CPU 主程序,使 CPU 执行 EXTI 对应的中断程序。

② 支持的触发方式:上升沿/下降沿/双边沿/软件触发

③ 支持的 GPIO 口:所有 GPIO 口,但相同的 Pin 不能同时触发中断

④ 触发响应方式:中断响应/事件响应(事件响应是指当外部中断检测到引脚变化时,中断信号就不会通向 CPU 了,而是通过其他外设,用来触发其他外设的操作(ADC、DMA),属于外设之间的联合工作)

7. EXTI 基本结构

8. AFIO 复用 IO 口

① AFIO 主要用于引脚复用功能的选择和重定义。

② 在 STM32 中,AFIO 主要完成两个任务:复用功能引脚重映射、中断引脚选择。

9. EXTI 内部框图

10. 旋转编码器介绍

① 旋转编码器:用来测量位置、速度或旋转方向的装置,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。

② 问答题:

Q:什么样的设备需要用到外部中断,使用外部中断的好处是什么?

A:对于 STM32,想要获取的信号是外部驱动,很快的突发信号,比如旋转编码器的输出信号,它产生的信号是突发的,STM32 只能被动读取。如果不及时处理,就会错过许多信号,所以需要有脉冲过来,STM32 立即进入中断函数处理。

③ 硬件电路图

(1) 交替导通与相位差:

  • 当你旋转旋钮时(无论顺时针还是逆时针),内部的触点会交替使 A 触点和 B 触点导通到地(GND)
  • 关键是:A 和 B 两个触点导通到地的时序使不同的!它们存在 90度(即1/4 周期)的相位差。这是判断旋转方向的核心。

(2) 电平变化 - 为什么能检测?

  • 无旋转(默认):图中 VCC 通过上拉电阻(R1,R2)连接到 A 和 B 端口。当触点没有导通到 GND 时,上拉电阻将这 A 和 B 端口拉到高电平(接近 VCC 电压)。
  • 旋转发生(触点到地):当旋转导致触点与A(或B)接触并导通到 GND 时,就相当于把 A(或B)端口直接短路到地。这时强大的 GND 会将 A(或B)端口的电平拉低。

(3) 消抖电路(C1,C2):旋转编码器使机械开关,触点接触时会产生微小的、快速的、不稳定的跳动(称为抖动),导致电平多次快速跳变。C1 和 C2 电容并联在 A 和 B 端口与 GND 之间,起到 GND 之间,起到滤波作用,吸收这些尖峰毛刺。

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

相关文章:

  • Adobe全系列下载 官方原版补丁
  • 【Spark征服之路-3.8-Spark-SQL核心编程(七)】
  • 2025獬豸杯WP
  • 用Phi-3 Mini微调实现英文到尤达语翻译
  • 软硬件协同仿真和验证的标准接口协议SCE-MI简介
  • 避坑指南:Windows 11中 Docker 数据卷的存放位置
  • vue+element-ui实现主子表
  • Vue3 面试题及详细答案120道(61-75 )
  • 力扣146:LRU缓存
  • 使用阿里云 ESA 边缘函数转发代理 docker registry
  • 利用aruco标定板标定相机
  • 电商通用话术模板搭建指南:高效转化,服务升级
  • macOS配置maven及报错处理:zsh: permission denied: mvn
  • Transformer输入部分实现
  • 学习 Flutter(五):玩安卓项目实战 - 下
  • springcloud环境和工程搭建
  • 数组算法之【数组中第K个最大元素】
  • RK3568笔记九十:基于web显示RTSP流
  • 【第三章自定义检视面板_创建自定义编辑器_如何创建自定义PropertyDrawer(9/9)】
  • SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法
  • HF86611_VB1/HF86611Q_VB1:多通道USB HiFi音频解码器固件技术解析
  • CLI 与 IDE 编码代理比较:提升开发效率的两种路径
  • docker安装minio及配置禁止列出目录文件
  • 解决Node 17+版本与Metro、Webpack等兼容性问题(500)
  • 【计算机网络】正/反向代理服务器,有状态/无状态应用
  • 构建高性能推荐系统:MixerService架构解析与核心实现
  • Spring-IoCDI
  • VPS海外部署Linux分布式计算任务调度-跨国资源整合方案
  • Git 常用的提交类型
  • Object Sense (OSE):一款从编辑器脚本发展起来的编程语言