STM32外部中断(EXTI)以及旋转编码器的简介

article/2025/6/7 1:06:53

一、外部中断机制概述 

中断是指当主程序执行期间出现特定触发条件(即中断源)时,CPU将暂停当前任务,转而执行相应的中断服务程序(ISR),待处理完成后恢复原程序的运行流程。该机制通过事件驱动方式显著提升系统效率,其优势在于可将中断事件与定时器任务从主循环中剥离,从而减少内核资源占用(例如避免使用阻塞式延时函数)。

二、中断优先级管理  

在多个中断源并发请求的场景下,CPU需根据预设的优先级策略进行仲裁,优先处理紧急程度更高的中断请求。优先级机制包含两种类型: 

1. 抢占优先级:允许高优先级中断打断正在执行的低优先级中断服务程序,形成中断嵌套 

2. 响应优先级:决定相同抢占优先级中断的排队顺序 

三、STM32中断体系架构 

STM32微控制器提供多种可屏蔽中断通道,包括EXTI(外部中断)、定时器(TIM)、模数转换器(ADC)等,各通道均支持16级可编程优先级。其中嵌套向量中断控制器(NVIC)作为核心管理单元,负责优先级分配及与CPU的通信。 

典型中断源示例: 

- WWDG:窗口看门狗中断 

- PVD:电源电压检测中断 

- RTC:实时时钟中断 

- FLASH:存储器操作中断 

- EXTI0~15:外部引脚中断 

四、中断向量与优先级分组 

中断响应通过硬件自动跳转至中断向量表实现。NVIC采用4位优先级寄存器(取值范围0-15),可通过位域划分配置抢占优先级与响应优先级的比例。 

五、外部中断(EXTI)工作原理 

EXTI模块通过监测GPIO端口的电平变化(支持上升沿、下降沿及双边沿触发模式)向NVIC发起中断请求。其特点包括: 

1. 所有GPIO端口均可触发中断,但同编号引脚(如PA0与PB0)不可同时使用 

2. 除GPIO外,还支持PVD输出、RTC闹钟等唤醒事件 

3. 提供20个中断/事件通道,其中: 

   - 中断模式:触发CPU中断服务 

   - 事件模式:直接联动其他外设而不中断CPU 

应用场景建议: 

- 适合处理高频信号(如旋转编码器) 

- 对于长时信号(如按键输入),建议采用定时器中断 

六、复用功能与引脚配置 

AFIO(Alternate Function IO)模块主要实现: 

1. 中断引脚选择:通过数据选择器将特定GPIO映射至EXTI通道(如EXTI0通道可配置为PA0/PB0/PC0等) 

2. 特殊功能直连:PVD、USB等信号直接接入EXTI系统 

3. 引脚功能重映射:支持外设功能的引脚重新配置 

注:EXTI9_5与EXTI15_10采用复合通道设计,需通过状态标志位识别具体中断源。

旋转编码器简介

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

硬件电路


http://www.hkcw.cn/article/xTRUkoEUYx.shtml

相关文章

【Unity开发】控制手机移动端的震动

🐾 个人主页 🐾 阿松爱睡觉,横竖醒不来 🏅你可以不屠龙,但不能不磨剑🗡 目录 一、前言二、Unity的Handheld.Vibrate()三、调用Android原生代码四、NiceVibrations插件五、DeviceVibration插件六、控制游戏手…

ES101系列07 | 分布式系统和分页

本篇文章主要讲解 ElasticSearch 中分布式系统的概念,包括节点、分片和并发控制等,同时还会提到分页遍历和深度遍历问题的解决方案。 节点 节点是一个 ElasticSearch 示例 其本质就是一个 Java 进程一个机器上可以运行多个示例但生产环境推荐只运行一个…

RabbitMQ在SpringBoot中的应用

1.简单模式 P:生产者,要发送消息的程序. C:消费者,消息的接收者. Queue:消息队列,类似于一个邮箱,生产者向其中投递消息,消费者从其中取出消息. 特点:一个生产者P,一个消费者C,消息只能被消费一次,也成为点对点模式. 适用场景:消息只能被单个消费者处理. 设置队列的名称为…

基于python写的目录/文件递归检索工具

核心功能 1. 目录结构检索 递归扫描 :深度遍历指定目录及其所有子目录 多种检索模式 : 仅文件夹模式:只显示目录结构仅文件模式:只显示文件列表文件文件夹模式:完整显示目录树结构(默认模式) …

Qwen3高效微调

高效微调 场景、模型、数据、算力 高效微调的应用场景 对话风格微调:高效微调可以用于根据特定需求调整模型的对话风格。例如,针对客服系统、虚拟助理等场景,模型可以通过微调来适应不同的 语气、礼貌程度 或 回答方式,从而在与…

不动产登记区块链系统(Vue3 + Go + Gin + Hyperledger Fabric)

好久没有介绍过新项目的制作了,之前做的一直都是Fisco Bcos的项目,没有介绍过Hyperledger Fabric的项目,这次来给大家分享下。 系统概述 不动产登记与交易平台是一个基于Hyperledger Fabric的综合性管理系统,旨在实现不动产登记…

深度学习学习率调度器指南:PyTorch 四大 scheduler 对决

在深度学习模型训练中,学习率调度器(Learning Rate Scheduler)是影响模型收敛效果和训练稳定性的关键因素。选择合适的学习率调度策略,往往能让模型性能产生质的飞跃。本文将深入对比PyTorch中最常用的四种学习率调度器&#xff0…

ERP学习-AP

业务需要。持续更新学习进度 借助网上零搭建平台上手实操 这个是简道云平台页面链接,登录的化去手机号登录 目前开始对应付模块进行学习

基于 ZYNQ UltraScale+ OV5640的高速图像传输系统设计,支持国产替代

引 言 随着电子信息技术的不断进步,人工智能、医 疗器械、机器视觉等领域都在高速发展 [1] ,工业相机 是机器视觉系统中的一部分 [2] ,对工业相机而言,传 输图像的速率、传输过程的抗干扰能力是其关键, 工业相…

smartGit 试用突破30天

1 下载 选择19.1版本 2 运行 我是linux环境 解压后, cd bin ./smartgit.sh 选择使用30天. 然后退出 3 绿色软件 破解步骤 下载破解文件:访问 Gitee 链接 goto下载下载破解文件 解压文件:下载后解压得到 crackSmartGit.jar 和 license.zip 用编辑…

一、基础环境配置

一、虚拟机 主:192.168.200.200 从:192.168.200.201 从:192.168.200.202 二、docker docker基础搭建,有不会的自行百度。 1.目录结构 /opt/software:软件包/opt/module:解压包,自定义脚本…

Java面试八股--08-数据结构和算法篇

1、怎么理解时间复杂度和空间复杂度 时间复杂度和空间复杂度一般是针对算法而言,是衡量一个算法是否高效的重要标准。先纠正一个误区,时间复杂度并不是算法执行的时间,在纠正一个误区,算法不单单指冒泡排序之类的,一个…

Oracle中的循环——FOR循环、WHILE循环和LOOP循环

目录 一、FOR循环 1.FOR循环语法结构 二、WHILE循环 1.WHILE循环语法结构 三、LOOP循环 1.LOOP循环语法结构 四、三个循环的区别(重要) Oracle中的循环常用的有:FOR循环、WHILE循环和LOOP循环 一、FOR循环 1.FOR循环语法结构 DECLARE --不声明变量&…

ubuntu 20.04挂载固态硬盘

我们有个工控机,可以接入一个固态硬盘。将固态硬盘插好后,就要进行挂载。在AI的指导下,过程并不顺利。记录如下: 1、检查硬盘是否被识别 安装好硬盘后,运行以下命令来检查Linux系统是否已识别新硬盘: …

SAP 自动编号的使用

1、NUMBER_RANGE_ENQUEUE用于锁定编号范围对象,防止多用户并发访问冲突 2、NUMBER_RANGE_DEQUEUE用于解锁已维护的编号范围对象。 3、此外,还提到了NUMBER_GET_NEXT函数模块,用于获取编号范围内的下一个号码。 文章目录 创建编号范围程序实现…

Python趣学篇:从零打造智能AI井字棋游戏(Python + Tkinter + Minimax算法)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《Python星球日记》 目录 🎮 前言一、项目概述与技术…

[定昌linux开发板]设置密码策略

找到etc/pam.d/目录下的common-password 2.先把common-password给复制一份,避免改错了 可以看到新增了一个common-password.bak文件 3.打开common-password,增加密码策略 输入: sudo vi /etc/pam.d/common-passwod 打开common-password文件 点击&…

Godot 敌人生成半径和围墙不匹配,导致敌人错误的生成在围墙外的解决代码

一、原视频 3. Preventing Invalid Spawning 二、原代码 func get_spawn_position():var player get_tree().get_first_node_in_group("player") as Node2Dif player null:return Vector2.ZEROvar spawn_position Vector2.ZEROvar random_direction Vector2.RIG…

LabVIEW磁悬浮轴承传感器故障识别

针对工业高端装备中主动磁悬浮轴承(AMB)的位移传感器故障检测需求,基于 LabVIEW 平台构建了一套高精度故障识别系统。通过集成品牌硬件与 LabVIEW 的信号处理能力,实现了传感器探头故障的实时监测与精准定位,解决了传统…

Qt开发:QThreadPool的介绍和使用

文章目录 一、QThreadPool 简介二、常用函数简介三、完整示例 一、QThreadPool 简介 QThreadPool 是 Qt 提供的用于高效管理线程资源的类。它通过线程池的方式管理和复用线程,适合处理大量、短时间运行的任务,避免频繁创建和销毁线程带来的性能开销。 常…