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

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

一、外部中断机制概述 

中断是指当主程序执行期间出现特定触发条件(即中断源)时,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.lqws.cn/news/100819.html

相关文章:

  • iOS 电子书听书功能的实现
  • Java中并发修改异常如何处理
  • React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例
  • 高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
  • C# winform教程(二)----button
  • 行列式详解:从定义到应用
  • C# CallerMemberName特性
  • macos常见且应该避免被覆盖的系统环境变量(避免用 USERNAME 作为你的自定义变量名)
  • 6.3 day 35
  • 【iOS】多线程基础
  • iptables常用命令
  • 014校园管理系统技术解析:构建智慧校园管理平台
  • Cursor + Claude 4:微信小程序流量主变现开发实战案例
  • 【notepad++】如何设置notepad++背景颜色?
  • 如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
  • 【学习记录】深入解析 AI 交互中的五大核心概念:Prompt、Agent、MCP、Function Calling 与 Tools
  • MyBatis实战项目测试
  • GIC v3 v4 虚拟化架构
  • C++--范围for循环详解
  • 基于大模型的慢性硬脑膜下血肿预测与诊疗系统技术方案
  • 手把手教你用Appsmith打造企业级低代码平台:从部署到性能调优实战
  • 虚拟线程与消息队列:Spring Boot 3.5 中异步架构的演进与选择
  • C++中锁和原子操作的区别及取舍
  • JavaScript性能优化实战指南
  • (25) 混沌工程测试实现
  • 【JS服务器】JETBRAINS IDEs JS服务器使用什么编译JNI
  • 新手小白使用VMware创建虚拟机练习Linux
  • 从0到1,带你走进Flink的世界
  • 腾讯云国际版和国内版账户通用吗?一样吗?为什么?
  • Nginx + Tomcat负载均衡群集