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

STM32——中断系统和外部中断EXTI

一、中断

1.1中断系统

中断系统是管理和执行中断的逻辑结构;

1.2中断

系统在执行主程序过程中,出现了特定的触发条件(触发源),系统停止执行当前程序,转而去执行中断程序,执行完毕后,返回至暂停的地方继续执行;

中断产生前,会对现场进行保护,中断结束后,会对现场进行恢复;

例如:串口通信时接收到一个信息,产生中断,触发DMA将数据转运走;

定时器定时中断,触发ADC测量等;

1.3中断优先级

当多个中断源同时申请中断时,CPU根据中断源的轻重缓急,优先执行优先级高的;

1.4中断嵌套

当一个中断程序正在允许时,又有新的更高优先级的中断源申请中断,CPU再次暂停执行当前中断程序,转而去执行新的中断程序,执行完毕后依次返回;

二、NVIC

2.1NVIC

在STM32中有很多可屏蔽的中断通道,使用NVIC,嵌套中断向量控制器统一管理,每一个通道有16个编程的优先级,通过对其进行分组,进一步设置抢占优先级和响应优先级;

2.2抢占优先级和响应优先级

在STM32中有16位的优先级寄存器,通过配置其中4位设置,高N位配置抢占优先级,低N-4位配置响应优先级;

抢占优先级可以执行中断嵌套;

响应优先级可以优先排队;

2.3中断向量表

中断函数执行地址是由编码器在随机分配的是不固定的;

但是由于硬件的限制,中断只能跳转到固定的位置,为了使中断可以跳转到随机的位置,定义一个地址列表,列表的地址是固定的,当产生中断时,跳转到固定地址,再有编码器和跳转到中断函数的代码,就可以实现跳转到任何的位置,这个地址列表就是中断向量表;

中断向量表排行越低,优先级越高;

产生中断后,自动执行中断函数;

三、外部中断

EXTI是众多能产生中断的外设之一;

EXTI外部中断,可以监控指定引脚的电平跳变,当引脚出现引脚跳变时,立刻向NVIC发送中断申请,经过NVIC仲裁后,CPU响应中断;

EXTI可以通过上边沿,下边沿,全边沿,软件触发(程序中执行一句代码就可以实现);

EXTI可以通过全部的GPIO通道外加RTC时钟,USB唤醒,以太网唤醒,RVD触发(从低功耗模式唤醒EXTI);

EXTI触发响应的方式:中断响应(配置NVIC优先级,CPU响应中断,触发中断函数),事件响应(触发其他外设工作);

四、EXTI工作流程图

外部信号通过GPIO输入至AFIO,AFIO选择配置外部中断引脚后,输出给EXTI,EXTI通过边沿选择和控制输出给NVIC或触发其他外设工作,NVIC配置优先级经过仲裁后,CPU响应中断;

五、AFIO

AFIO复用IO口,主要用于引脚重映射和外部中断引脚选择

AFIO内部本质是一个数据选择器,对输入的GPIO——pin引脚进行选择,作为EXTI的外部引脚输入,因为AFIO只有16个输出通道到EXTI,所以相同pin引脚只能有一个可以触发;

AFIO的结构图:

六、EXTI结构图

经过AFIO选择后的信号输入至EXTI,通过APB总线配置边沿触发选择和软件触发选择器,配置触发方式(上升沿,下降沿,全边沿,软件), 触发后进入或门(有1则为1),分为两路,一路和事件屏蔽信号组成一个与门(有0则0)组成事件响应,另一路置中断标志位并和中断屏蔽信号组成中断触发至NVIC;

使用外部中断模块的特性:想要获取的信号是外部驱动的很快的突变信号; 

七、API实现

7.1对射式红外编码器计次

7.1.1实现的功能:当红外编码器被遮挡时,触发中断,计数加1,通过OLED显示;

7.1.2思路:

底层:配置EXTI,中断函数计次计数值,读取计次;

驱动层:初始化EXTI,OLED显示;

1.RCC开始GPIO,AFIO,EXTI,NVIC时钟(EXTI和NVIC不需要开启,上电后自动开启)

2.初始化GPIO,配置为上拉输入模式,读取外部引脚信号;

3.配置AFIO选择外部中断引脚,连接GPIO->AFIO->EXTI;

4.配置EXTI选择边沿触发方式,触发方式,连接EXTI->NVIC;

5.配置NVIC对优先级进行分组,设置抢占优先级和响应优先级,连接NVIC->CPU;

6.配置中断函数,在中断函数中执行,当产生中断时候计次++;

7.使用OLED显示;

7.1.3函数分析:

void EXTI_DeInit(void);//复位EXTI
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);//结构体初始化EXTI
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);//初始化结构体
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);//软件触发
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);//程序读取中断标志位
void EXTI_ClearFlag(uint32_t EXTI_Line);//清除中断标志位
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);//中断函数里读取中断标志位
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);//清除中断标志位

NVIC.H

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);//优先级分组
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);//初始化
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);//设置向量表位置和偏移量
@param NVIC_VectTab:指定向量表是在 RAM 还是闪存中。
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);//指定系统进入低功耗模式
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);//指定SysTick 时钟源

7.1.4实现

1.RCC开始GPIO,AFIO,EXTI,NVIC时钟(EXTI和NVIC不需要开启,上电后自动开启)

2.初始化GPIO,配置为上拉输入模式,读取外部引脚信号;

3.配置AFIO选择外部中断引脚,连接GPIO->AFIO->EXTI;

4.配置EXTI选择边沿触发方式,触发方式,连接EXTI->NVIC;

5.配置NVIC对优先级进行分组,设置抢占优先级和响应优先级,连接NVIC->CPU;

6.配置中断函数,在中断函数中执行,当产生中断时候计次++;

防止信号抖动,可以再次判断引脚电平;

7.使用OLED显示;

7.2机械触点式编码器计次 

在红外传感器基础上,额外配置一个通道即可

相关文章:

STM32——中断系统和外部中断EXTI

一、中断 1.1中断系统 中断系统是管理和执行中断的逻辑结构; 1.2中断 系统在执行主程序过程中,出现了特定的触发条件(触发源),系统停止执行当前程序,转而去执行中断程序,执行完毕后&#xf…...

使用uniApp+vue3+Vite4+pinia+sass技术栈构建微信小程序

使用uniApp的cli模式安装,可以使用vscode开发。不用再单独去下载HBuilderX. 1.基础安装 vue3tsuniapp 方法一: npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project方法二:可以去uni-preset-vue的vite分支下选择vite-ts直接下载zi…...

npm 被滥用 -- 有人上传了 700 多个武林外传切片视频

Sonatype 安全研究团队最近曝光了一起滥用 npm 的案例 —— 他们发现在 npm 上托管的 748 个软件包实际上是视频文件。 据介绍,这些软件包每个大小约为 54.5MB,包名以 “wlwz” 为前缀,并附带了代表日期的数字。根据时间戳显示,这…...

代码随想录算法训练营29期|day34 任务以及具体任务

第八章 贪心算法 part03 1005.K次取反后最大化的数组和 class Solution {public int largestSumAfterKNegations(int[] nums, int K) {// 将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小nums IntStream.of(nums).boxed().sorted((o1, o2) -> Math.ab…...

LeetCode 每日一题 2024/1/22-2024/1/28

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/22 670. 最大交换1/23 2765. 最长交替子数组1/24 2865. 美丽塔 I1/25 2859. 计算 K 置位下标对应元素的和1/26 2846. 边权重均等查询1/27 2861. 最大合金数1/28 365. 水壶…...

好用的学习与开发工具

1. 首推 UTools 官网地址 uTools官网 - 新一代效率工具平台 介绍 uTools 是一个极简、插件化的现代桌面软件,通过自由选配丰富的插件,打造得心应手的工具集合。 通过快捷键(默认 alt space )就可以快速呼出这个搜索框。你可…...

(自用)learnOpenGL学习总结-高级OpenGL-立方体贴图

ok终于来到了立方体贴图了,在这里面我们可以加入好看的天空包围盒,这样的画我们的背景就不再是黑色的了! 首先,立方体贴图和前面的sampler2D贴图一样,不过是6个2D组成的立方体而已。 那么为什么要把6个组合在一起呢&…...

【计算机网络】——TCP协议

📑前言 本文主要是【计算机网络】——传输层TCP协议的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句…...

sql优化的方法

目录 一、准备数据 1.1、创建表结构 1.2、创建存储过程 二、索引介绍 2.1、类型介绍 2.2、建立索引 2.3、建立复合索引 2.4、查看所有建立的索引 2.5、删除索引 三、EXPLAIN分析参数说明 四、SQL优化案例 4.1、避免使用SELECT * 4.2、慎用UNION关键字 4.4、避免使…...

C++ Qt开发:运用QJSON模块解析数据

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析…...

MySQL数据库基础合集

MySQL数据库基础合集 目录 MySQL数据库基础合集SQL关键字DDL关键字DML关键字DQL关键字DCL关键字约束关键字 SQL基础数据类型整数类型字符类型浮点类型时间类型 数据定义语言DDL1.查看数据库2.创建库3.删除库4.切换库5.创建表6.删除表7.查看表8.查看表属性9.插入列10.修改列11.设…...

oracle19.22的patch已发布

2024年01月16日,oracle发布了19.22的patch 具体patch如下 Reserved for Database - Do not edit or delete (Doc ID 19202401.9) 文档ID规则如下 19(版本)年份(202x)(季度首月01,04,07,10).9 往期patch no信息和下…...

HTML+CSS:3D轮播卡片

效果演示 实现了一个3D翻转的卡片动画&#xff0c;其中每个卡片都有不同的图片和不同的旋转角度。整个动画循环播放&#xff0c;无限次。整个页面的背景是一个占据整个屏幕的背景图片&#xff0c;并且页面内容被隐藏在背景图片之下。 Code <div class"container"…...

ES 分词器

概述 分词器的主要作用将用户输入的一段文本&#xff0c;按照一定逻辑&#xff0c;分析成多个词语的一种工具 什么是分词器 顾名思义&#xff0c;文本分析就是把全文本转换成一系列单词&#xff08;term/token&#xff09;的过程&#xff0c;也叫分词。在 ES 中&#xff0c;Ana…...

从0开始搭建若依微服务项目 RuoYi-Cloud(保姆式教程完结)

文章接上一章&#xff1a; 从0开始搭建若依微服务项目 RuoYi-Cloud&#xff08;保姆式教程 一&#xff09;-CSDN博客 四. 项目配置与启动 当上面环境全部准备好之后&#xff0c;接下来就是项目配置。需要将项目相关配置修改成当前相关环境。 数据库配置 新建数据库&#xff…...

Linux true/false区分

bash的数值代表和其它代表相反&#xff1a;0表示true&#xff1b;非0代表false。 #!/bin/sh PIDFILE"pid"# truenginx进程运行 falsenginx进程未运行 checkRunning(){# -f true表示普通文件if [ -f "$PIDFILE" ]; then# -z 字符串长度为0trueif [ -z &qu…...

一些著名的软件都用什么语言编写?

1、操作系统 Microsoft Windows &#xff1a;汇编 -> C -> C 备注&#xff1a;曾经在智能手机的操作系统&#xff08;Windows Mobile&#xff09;考虑掺点C#写的程序&#xff0c;比如软键盘&#xff0c;结果因为写出来的程序太慢&#xff0c;实在无法和别的模块合并&…...

外卖跑腿系统开发:构建高效、安全的服务平台

在当今快节奏的生活中&#xff0c;外卖跑腿系统的开发已成为技术领域的一个重要课题。本文将介绍如何使用一些常见的编程语言和技术框架&#xff0c;构建一个高效、安全的外卖跑腿系统。 1. 技术选择 在开始开发之前&#xff0c;我们需要选择适合的技术栈。常用的技术包括&a…...

【MQ02】基础简单消息队列应用

基础简单消息队列应用 在上一课中&#xff0c;我们已经学习到了什么是消息队列&#xff0c;有哪些消息队列&#xff0c;以及我们会用到哪个消息队列。今天&#xff0c;就直接进入主题&#xff0c;学习第一种&#xff0c;最简单&#xff0c;但也是最常用&#xff0c;最好用的消息…...

CTF CRYPTO 密码学-7

题目名称&#xff1a;敲击 题目描述&#xff1a; 让我们回到最开始的地方 0110011001101100011000010110011101111011011000110110010100110011011001010011010100110000001100100110001100101101001101000011100001100011001110010010110100110100011001000011010100110000…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...