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机械触点式编码器计次 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/357620.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows系统下启动redis命令

windows系统下启动redis命令 进入redis安装目录 cd redis 输入 redis-server.exe redis.windows.conf 启动redis命令,看是否成功 可能会启动失败,报[1696] 30 Jan 09:46:07.518 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No erro…

云计算底层技术、磁盘技术揭秘虚拟化管理、公有云概述

查看本机是否具备虚拟化支持 硬件辅助虚拟化 处理器里打开 虚拟化Inter VT-x/EPT 或AMD-V 构建虚拟化平台工具软件包 yum 与 dnf Yum和DNF都是用于管理Linux系统中的软件包的工具,但它们在许多方面存在一些差异。以下是一些可能的区别: 依赖解…

运行VUE提示找不到模块validate-engines.js...

原来好好的,突然提示找不到模块validate-engines.js,CMD命令行输入npm -v不是内部或外部命令,node -v可以查看到版本号。 解决: 1. 卸载nodejs,重新下载安装文件:下载nodejs 2. 到目录:C:\Us…

成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘

成功解决AttributeError: ‘str’ object has no attribute ‘decode’. 🌵文章目录🌵 🌳引言🌳🌳报错分析及解决方案🌳🌳参考文章🌳🌳结尾🌳 🌳引…

Chiplet,汽车“芯”风向

异构集成、高速互联、算力灵活可扩展正在成为新一轮汽车芯片竞争的焦点。尤其是随着以ChatGPT为代表的大数据、大模型产品在车端的落地,对于芯片的要求还在持续提升。 本周,12家日本汽车制造商(包括丰田、日产、本田等)、零部件制…

Redis 面试题 | 20.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

三、防御保护---防火墙安全策略篇

三、防御保护---防火墙安全策略篇 一、什么是安全策略二、安全策略的组成1.匹配条件2.动作3.策略标识 三、防火墙的状态检测和会话表1.会话表2.状态检测技术 四、ASPF--隐形通道五、用户认证1.用户认证的分类2.认证方式3.认证策略4.认证域 一、什么是安全策略 传统的包过滤防火…

ORBSLAM3 运行流程 以rgbd_tum.cc函数为例进行分析

一、运行 使用的是D435i相机自己录制的数据。 运行命令: ./Examples/RGB-D/rgbd_tum /opt/vslam/ORB_SLAM3_detailed_comments-dense_map_new/Vocabulary/ORBvoc.txt /opt/vslam/ORB_SLAM3_detailed_comments-dense_map_new/Examples/RGB-D/TUM1.yaml /opt/vsl…

医美诊疗前后要注意的八大诀窍

【记者许家源/综合报导】 随着年龄的增长,许多人都想保持年轻美丽,因此寻求医美诊疗的帮助。然而,进入医美诊所后,你可能会发现,想要打肉毒、除毛等,实际花费和广告中的金额相差甚远。为了避免上当受骗&am…

C# 使用WMI监听进程的启动和关闭

写在前面 Windows Management Instrumentation(WMI)是用于管理基于 Windows 操作系统的数据和操作的基础结构。具体的API可以查看 WMI编程手册。 WMIC 是WMI的命令行管理工具,使用 WMIC,不但可以管理本地计算机,还可…

Layui + Echarts 5.0

Layui 怎么整合最新版本的 Echarts 5.0,Echarts 4 升级到 5后,有了很大改变,新的配置项4是无法兼容的,所以想要使用新的功能,都需要升级! 新建一个echarts.js文件 layui.define(function (exports) {// 这…

【教程】iOS如何抓取HTTP和HTTPS数据包经验分享

📱 在日常的App开发和研发调研中,对各类App进行深入的研究分析时,我们需要借助专业的抓包应用来协助工作。本文将介绍如何使用iOS手机抓包工具来获取HTTP和HTTPS数据包,并推荐一款实用的抓包应用——克魔助手,希望能够…

Spring: 实体类转换工具总结

文章目录 一、MapStruct1、介绍2、原理3、使用4、问题处理(1)IDEA编译报错:NullPointerException 一、MapStruct 1、介绍 MapStruct是一个实体类属性映射工具,通过注解的方式实现将一个实体类的属性值映射到另外一个实体类中。在…

前缀和入门(c++语言)

在讲算法之前,我们先来思考一个问题:小明有n个编号为1~n的篮子,每个篮子里装有ai个苹果,求从 x至y 的篮子里的苹果数量之和。 如果没学过前缀和的同学,可能会打出这样的代码: 这种算法要得出一个区间之和&…

隐马尔可夫模型系列——(六)总结与展望

一、总结: 隐马尔可夫模型(Hidden Markov Model,HMM)是一种用于建模序列数据的统计模型,在语音识别、自然语言处理、金融领域等多个领域都有广泛的应用。其优势包括可以处理动态序列数据、具有一定的鲁棒性、可以灵活…

阿里云服务器2024年最新优惠价格表,轻量应用服务器61元起,云服务器99元起

阿里云服务器2024年最新优惠价格是多少?不同时期阿里云服务器的租用价格不同,进入2024年,阿里云服务器的优惠价格也有所变动,共享型云服务器2核2G最低还是只要99元1年,独享型云服务器2核4G只要199元1年,而轻…

复杂SQL治理实践 | 京东物流技术团队

一、前言 软件在持续的开发和维护过程中,会不断添加新功能和修复旧的缺陷,这往往伴随着代码的快速增长和复杂性的提升。若代码库没有得到良好的管理和重构,就可能积累大量的技术债务,包括不一致的设计、冗余代码、过时的库和框架…

探讨UI自动化测试几步骤

随着软件开发的不断发展,UI自动化测试变得越来越重要,它能够提高测试效率、降低人为错误,并确保软件交付的质量。本文将介绍UI自动化测试的一般步骤和一些最佳实践,以帮助开发团队更好地实施自动化测试。 需求分析和选择测试工具&…

RabbitMQ基本使用,docker安装RabbitMQ,SpringBoot整合RabbitMQ

1.拉取镜像 docker pull rabbitmq:3.9.15-management2.运行容器 docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIErabbitcookie rabbitmq:3.9.15-management3.访问地址 安装ip加端口号 http://192.168.123.3:156…

通过Opencv进行角点检测

目录 引入 介绍 ①使用的主要函数介绍 ②实际例子解释 ③自相似性是什么? 引入 我们想要获取图片上的角点,就要用到我们的harris角点检测 介绍 ①使用的主要函数介绍 cv2.cornerHarris() img: 数据类型为 float32 的入图像 不是float32的数据要使用&#xff0…
最新文章