STM32:配置EXTI—对射式红外传感器计次

文章目录

  • 1、中断
    • 1.2 中断系统
    • 1.3 中断执行流程
  • 2、STM32中断
    • 2.2EXTI(外部中断)
    • 2.3 EXTI 的基本结构
    • 2.4 AFIO复用IO口
  • 3、NVIC基本结构
    • 3.2 NVIC优先级分组
  • 4、配置EXTI
    • 4.2 AFIO 库函数
    • 4.3 EXTI 库函数
    • 4.4 NVIC 库函数
    • 4.5 配置EXTI的步骤
    • 4.6 初始化EXTI

1、中断

1.2 中断系统

  • 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。
  • 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。
  • 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。

1.3 中断执行流程

在这里插入图片描述

在主程序中,当他执行到某个地方时,这时无论主程序在干什么事情,只要满足了外设的中断条件,主程序都立即暂停,程序由硬件电路自动跳转到中断程序中。当中断程序执行完后,程序在返回被暂停的地方继续运行。

右边就是中断嵌套的执行流程,当其中一个中断正在执行时,又有新的优先级更高的中断来,那么就会再次打断中断,然后执行新的中断;新的中断结束,再继续原来的中断,原来的中断结束,再继续主程序,这就是中断嵌套。

带有中断的C语言程序如下:
在这里插入图片描述

2、STM32中断

  • 68个可屏蔽中断通道,包含EXTI、TIM、ADC、 USART、SPI、I2C、 RTC等多个外设。
  • 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级响应优先级

2.2EXTI(外部中断)

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

  • 支持的触发方式:上升沿/下降沿/双边沿/软件触发
  • 支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断(意思是PA0和PB0不能同时使用,或者PA1、PB1、PC1等这样的)。
  • 通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒。
  • 触发响应方式:中断响应/事件响应。

2.3 EXTI 的基本结构

外部中断的整体结构图如下所示:
在这里插入图片描述
最左边是GPIO口的外设,比如GPIOA、GPIOB、GPIOC等等,每个GPIO外设有16个引脚,所以进来16根线。

EXTI模块只有16个GPIO的通道,但每个GPIO外设都有16个引脚,如果每个引脚都占用一个通道,那么EXTI的通道就不够用了,因此在这里就会有一个AFIO中断引脚选择的电路模块。

这个AFIO就是一个数据选择器,他可以在前面的3个GPIO外设的16个引脚中选择其中一个连接到后面EXTI的通道里,所以印证了前面我们所说的相同的Pin不能同时出发中断。

然后通过AFIO选择之后的16个通道,就接到了EXTI边沿检测及控制电路上,同时下面还接入了4个外设;这些加起来就组成了EXTI的20个输入信号。

然后经过EXTI电路之后,分为了两种输出。上面部分接NVIC,用来触发中断;下面部分有20条输出线路接到了其他外设,用来触发其他外设中断,也就是事件响应。

2.4 AFIO复用IO口

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

3、NVIC基本结构

在这里插入图片描述
在STM32系统中,NVIC是用来统一分配中断优先级和管理中断的。NVIC是一个内核外设,是CPU的助手;他有很多输入口,中断线路都可以接过去;线上画了斜杠,上面写了n,意思是一个外设可能同时占用多个通道,因此这里有n条线。

NVIC只有一个出口,NVIC根据每个中断的优先级分配中断的先后顺序,之后通过右边的输出口告诉CPU应该处理哪个中断。

3.2 NVIC优先级分组

为了处理不同形式的优先级,STM32的NVIC可以对优先级进行分组,分为抢占优先级和响应优先级。

  • NVIC的中断优先级由优先级寄存器的4位(0~15)决定(值越小,优先级越高),这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级。
  • 抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队。

在这里插入图片描述

4、配置EXTI

4.2 AFIO 库函数

对于AFIO,ST公司并没有给他分配专门的库函数文件,他的库函数与GPIO在一个文件内。其中红色部分就是与AFIO有关的库函数。
在这里插入图片描述
1.GPIO_AFIODeInit,这个函数是用来复位AFIO外设的,调用一下这个函数,AFIO的配置就会全部清零。

2.GPIO_PinLockConfig,用来锁定GPIO配置,调用这个函数,参数指定某个引脚,那这个引脚就会被锁定,防止意外更改。

3.GPIO_EventOutputConfig,这个函数用来配置AFIO的事件输出功能的。

4.GPIO_EventOutputCmd,也是用来配置AFIO的事件输出功能。

5.GPIO_PinRemapConfig,用来进行引脚重映射,第一个参数选择要重映射的方式,第二个参数是新的状态。

6.GPIO_EXTILineConfig,调用这个函数,就可以配置AFIO的数据选择器,来选择想要的中断引脚。

7.GPIO_ETH_MediaInterfaceConfig,和以太网有关的函数。

4.3 EXTI 库函数

在这里插入图片描述
1.EXTI_DeInit,调用他,可以把EXTI的配置都清除,恢复成上电默认状态。

2.EXTI_Init,根据结构体里面的参数配置EXTI外设,初始化EXTI。

3.EXTI_StructInit,可以把参数的结构体变量赋一个默认值。

4.EXTI_GenerateSWInterrupt,软件出发外部中断,调用这个函数,参数给一个指定的中断线,就能软件出发一次外部中断。

5.FlagStatus EXTI_GetFlagStatus,可以获取指定的标志位是否被置1。

6.EXTI_ClearFlag,可以对置1的标志位进行清除。

7.ITStatus EXTI_GetITStatus,获取中断标志位是否被置1。

8.EXTI_ClearITPendingBit,清除中断挂起标志位。

其中第5、6个函数和第7、8个函数的区别是:第5、6个函数是用在主程序中查看和清除标志位的;而第7、8个函数是在中断函数里查看和清除标志位的。

4.4 NVIC 库函数

在这里插入图片描述
1.NVIC_PriorityGroupConfig,用来中断分组,参数是中断分组的方式。

2.NVIC_Init,根据结构体里面指定的参数初始化NVIC。

3.NVIC_SetVectorTable,设置中断向量表。

4.NVIC_SystemLPConfig,系统低功耗配置。

4.5 配置EXTI的步骤

在这里插入图片描述

上面是外部中断的整体结构图,我们把图中的每个模块都打通,就能实现中断了,分为如下5个步骤:

1、配置RCC,把要涉及的外设的时钟都打开(不打开时钟,外设是无法工作的);

2、配置GPIO,选择我们的端口为输入模式;

3、配置AFIO,选择我们的这一路GPIO,连接到后面的EXIT;

4、配置EXIT,选择边沿触发方式,比如上升沿,下降沿或者双边沿,以及选择触发响应方式,可以选择中断响应和事件响应(一般是中断响应);

5、配置NVIC,给我们这个中断选择一个合适的优先级。

6、通过NVIC,外部中断信号就能进入CPU了,这样CPU才能收到中断信号,才能跳转到中断函数里执行中断程序。

需要注意的是:注意,NVIC不需要手动开启时钟,因为NVIC属于内核中的外设,内核中的外设是不需要手动开启时钟的。

4.6 初始化EXTI

例如我们需要对一个对射式红外传感器进行计次,先将传感器的功能封装在一个模块里,对这个传感器的初始化配置如下:

#include "stm32f10x.h"  // Device headervoid CountSensor_Init(void)
{
//1.配置RCCRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //开启GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //开启AFIO的时钟//RCC管的是内核外的外设//AFIO也是APB2外设总线上的//EXTI和NVIC两个外设时钟是一直都打开的,不需要我们再开启时钟//NVIC是内核的外设,内核的外设不需要开启时钟//2.配置GPIOGPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPD;//选择模式GPIO_Initstructure.GPIO_Pin=GPIO_Pin_14;//选择引脚GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_Initstructure);//调用函数,初始化GPIOB外设//3.配置AFIO	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);  //配置AFIO外部中断引脚//当执行完这个函数后,AFIO的第14个引脚数据选择器就拨好了//输入端被拨到了GPIO外设上,对应的就是PB14号引脚;输出端固定连接的是EXTI的第14个中断线路。//这样PB14号引脚的电平信号就可以顺利通过AFIO,进入后面的EXTI电路了//4.配置EXTIEXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line14;//指定要配置的中断线EXTI_InitStructure.EXTI_LineCmd=ENABLE;//指定选择的中断线的新状态EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//指定外部中断线模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//指定触发信号的有效边沿方式EXTI_Init(&EXTI_InitStructure);//5.配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置优先级分组:先占优先级和从占优先级//6.调用NVIC_Init函数NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//指定中断通道来开启或关闭NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//指定抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//指定响应优先级NVIC_Init(&NVIC_InitStructure);}

外部中断的信号从GPIO到AFIO,再到EXTI,再到NVIC,最终通向CPU,这样才能让CPU由主程序跳转到中断程序执行。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

自动装车系统中激光雷达如何应对复杂环境

自动装车系统中激光雷达的稳定运行策略 在自动装车系统的设计和实施中,激光雷达作为核心传感器之一,其性能和准确性直接关系到整个系统的稳定性和工作效率。然而,实际运行中的现场环境往往复杂多变,对激光雷达的稳定运行构成一定…

[AI OpenAI-doc] 迁移指南 Beta

我们已经改变了助手 API 在 beta 的 v1 版本和 v2 版本之间工具和文件的工作方式。今天,通过 API,两个 beta 版本仍然可以访问,但我们建议尽快迁移到我们 API 的最新版本。我们将在 2024 年底之前废弃 beta 的 v1 版本。 如果您今天不使用助手…

华人团队用大模型实现“读心术”:大脑活动直接变文字

NeurIPS收录的一项新研究,让大模型也学会“读心术”了! 通过学习脑电波数据,模型成功地把受试者的脑电图信号翻译成了文本。 而且整个过程不需要大型设备,只要一块特制的“头巾”就能实现。 这项成果名为DeWave,能在…

鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位

时间概念太重要了,在鸿蒙内核又是如何管理和使用时间的呢? 时间管理以系统时钟 g_sysClock 为基础,给应用程序提供所有和时间有关的服务。 用户以秒、毫秒为单位计时.操作系统以Tick为单位计时,这个认识很重要. 每秒的tick大小很大程度上决…

解决 git克隆拉取代码报SSL certificate problem错误

问题:拉取代码时报错,SSL证书问题:证书链中的自签名证书问题 解决:只需要关闭证书验证,执行下面代码即可: git config --global http.sslVerify "false" 再次拉取代码就可以了

STC89C52驱动XPT2046AD转换

目录 简介封装接线(单端)时序以及命令字SPI时序命令字 程序XPT2046.CXPT2046.hmain.c测试 简介 XPT2046是一款4线电阻式触摸屏控制器,采用12位125 kHz采样SAR类型A / D转换器。XPT2046工作电压低至2.2V,支持1.5V至VCC的数字I/O接…

暗区突围服务器连接失败/网络异常/无法连接下载解决方法

暗区突围是一款仿真战场的模拟,首要介绍的自然是游戏中基本都会参与的模式,叫做战术行动,大家参与其中是会作为特遣队员的身份来做任务,面临的是一个全面自给自足的战场环境,这种模式要求玩家在进入暗区之前自行筹备所…

Jmeter 中 CSV 如何参数化测试数据并实现自动断言

当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化。此种情况下,很多测试工程师只会人工地查看响应结果来判断用例是…

PC小程序解密及反编译

一、小程序包解密 小程序原始加密包位置C:\Users\administrator\Documents\WeChat Files\Applet\wx234324324324 二、wxappUnpacker反编译 npm install./bingo D:\temp\小程序包解密\wxpack\wx234324324324.wxapkg 三、查看反编译后的文件

阿里云国际服(alibabacloud)介绍、注册、购买教程?

一、什么是阿里云国际版? 阿里云分为国内版和国际版。国内版仅面向中国大陆客户,国际版面向全球客户。 二、国际版与国内版有何异同? 1)异:除了目标客户不同,运营主体不同,所需遵守的法律与政…

精酿啤酒:种类与风格的多样性探索

啤酒,这一古老的酒精饮品,随着时代的发展与技术的进步,已经衍生出了无数种类与风格。其中,精酿啤酒在近年来备受瞩目,以其与众不同的酿造工艺和风味,成为了啤酒爱好者们的新宠。Fendi club 啤酒&#xff0c…

k8s常见问题:如何处理CrashLoopBackOff问题?

CrashLoopBackOff 概述 首先关于CrashLoopBackOff并不是代表一种错误, "CrashLoopBackOff 是 Kubernetes 中的一个状态,表示在一个 Pod 中发生的重启循环:Pod 中的一个容器启动之后发生了问题,然后反复重启。 Kubernetes 会…

Hive3.0新特性:Materialized Views 物化视图

Materialized Views 物化视图 在 Apache Hive 3.0 中引入了物化视图(Materialized Views)的支持,它们是预先计算并缓存了查询结果的数据结构,以提高查询性能和降低延迟。物化视图通过将查询的结果存储在物理表中来实现&#xff0…

武汉星起航:五对一服务体系,助力创业者成功进军跨境电商市场

随着全球化的深入发展和互联网的普及,跨境电商已成为越来越多国内创业者的首选。然而,跨境电商市场的复杂性和多变性使得许多新手创业者望而却步。在这样的背景下,武汉星起航电子商务有限公司以其独特的五对一服务体系,为创业者提…

为什么企业高管更偏爱中外合办硕士?人大女王金融硕士为你解析

在当今全球化的商业环境中,企业高管们对于自身的职业发展和知识更新提出了越来越高的要求。这其中,中外合办硕士项目因其独特的优势,逐渐受到了企业高管的青睐。那么,为什么企业高管更偏爱中外合办硕士呢?下面我们以人…

微软“叛变”了!本月或将推出5000亿新AI模型MAI-1,对抗谷歌和OpenAI | 最新快讯

(图片来源:钛媒体 App 编辑拍摄) 钛媒体 App 5 月 6 日消息,据 The information 报道,美国科技巨头微软公司(Microsoft)将推出一款参数达 5000 亿的全新 AI 模型产品,内部称为 MAI-1…

2024 cleanmymac有没有必要买呢,全反面分析

在使用mac时,小编遇到了运行内存不足、硬盘空间不足的情况。遇到这种情况,我们可以借助经典的电脑深度清理软件——CleanMyMac X,清理不常用的软件和系统垃圾,非常好用!不过,有许多网友发现CleanMyMac X有免…

【PyTorch单点知识】深入理解与应用转置卷积ConvTranspose2d模块

文章目录 0. 前言1. 转置卷积概述2. nn.ConvTranspose2d 模块详解2.1 主要参数2.2 属性与方法 3. 计算过程(重点)3.1 基本过程3.2 调整stride3.3 调整dilation3.4 调整padding3.5 调整output_padding 4. 应用实例5. 总结 0. 前言 按照国际惯例&#xff0…

Amazon Q Business现已正式上市!利用生成式人工智能协助提高员工生产力

在 2023 年度 AWS re:Invent 大会上,我们预览了 Amazon Q Business,这是一款基于生成式人工智能的助手,可以根据企业系统中的数据和信息回答问题、提供摘要、生成内容额安全地完成任务。 借助 Amazon Q Business,您可以部署安全、…

[性能优化工具类] 批量Mesh网格压缩

问题描述: 对于3D游戏工程来说,美术资源的存储几乎占据了绝大多数的空间,而对于一个3d 模型文件,MeshFilter(网格过滤器)负责存储物体的网格 以及贴图。依靠MeshRender(网格渲染器)跟据MeshFilter的信息去…