【GD32】03 - EXTI外部中断

EXTI

EXTI,全称External Interrupt/Event Controller,即外部中断/事件控制器,是微控制器中的一个重要组成部分。它主要用于管理来自外部设备的中断和事件请求。以下是关于EXTI的详细介绍:

  1. 功能概述:
  • EXTI管理了控制器的多个中断/事件线,通常这些线路数量在STM32等微控制器中可以达到20个或更多。
  • 每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿检测。这意味着当外部信号的状态从低电平变为高电平(上升沿)或从高电平变为低电平(下降沿)时,EXTI可以检测到这种变化并产生相应的中断或事件。
  • EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性(如上升沿触发、下降沿触发或双边沿触发)。
  1. 两大功能:
  • 产生中断:当外部设备触发中断条件时,它会向EXTI发送中断请求。EXTI会接收并处理这些中断请求,并将信号传递给NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)进行处理。NVIC会根据中断的优先级来决定是否响应中断,并调用相应的中断服务程序。
  • 产生事件:除了产生中断外,EXTI还可以产生事件。这些事件可以用于触发某些特定的操作或行为,而无需进入中断服务程序。例如,可以使用EXTI来检测按钮的按下事件,并在检测到该事件时执行某个特定的任务或操作。
  1. 典型应用:
  • 在物联网应用中,NVIC和EXTI是常用的中断处理器和中断控制器。外部设备可以是各种传感器、开关、按钮等。当这些设备触发中断条件时,它们会向EXTI发送中断请求,EXTI会接收并处理这些请求,并触发相应的中断服务程序或事件处理程序。
  • 在嵌入式系统中,EXTI也常用于处理各种外设的中断请求,例如传感器数据的到达、网络通信的中断等。
  1. 结构特点:
  • EXTI的结构通常包括多个中断/事件线、边沿检测器、配置寄存器等部分。每个中断/事件线都可以单独进行配置,以选择请求类型和相应的触发事件。此外,EXTI还提供了丰富的库函数和API,方便开发人员进行编程和配置。

总的来说,EXTI是微控制器中一个重要的外部中断/事件控制器,它可以实现对外部设备的中断和事件请求的管理和处理。在物联网和嵌入式系统等领域中,EXTI具有广泛的应用前景和重要的价值。

以上介绍来自文心一言。

GD32中的EXTI

很常规的EXTI,与STM32不一样的是,GD32这边的优先级是只有2位配置中断优先级的。

再看看中断的流程。

那根据上面的框图,我们要实现外部中断,要配置的东西就是边沿检测,极性控制,中断屏蔽控制(NVIC)。

然后和STM32一样的是,我们是GPIO几,那么中断线就是几号。并且同一时间同一个引脚号只能使用一种端口(A,B,C)

固件库函数

首先我们除了需要打开拿来外部中断的GPIO的外设时钟之外。由于我们还需要将GPIO口映射到中断线上,因此还需要配置系统时钟。

rcu_periph_clock_enable(RCU_CFGCMP);

exti_init

初始化EXTI。

如果我们用的是GPIO的0号引脚,那么选择0号中断线(EXTI_0),一号引脚就选择1号中断线,以此类推。

模式一般选择中断模式EXTI_INTERRUPT

exti_interrupt_enable

中断使能,输入的参数指定中断线。

exti_interrupt_flag_get

获取指定中断线的标志位,当我们有多条中断线共用一个中断处理函数的时候可以帮助我们判断具体是哪一个中断线触发的中断。

exti_interrupt_flag_clear

清除指定中断线的中断标志位。

关于EXTI的函数就上面几个就够了。但是根据框图,我们还需要将GPIO映射到中断线上,以及配置NVIC的优先级。

syscfg_exti_line_config

根据上面表格的参数来填写,将我们使用的端口以及对应的中断线选上。因为中断线的序号和GPIO的引脚号是一致的,所以只需要说是EXTI的哪个引脚(中断线)即可。

nvic_irq_enable

使能NVIC中断并且配置优先级。

可以自行去官方提供的固件库使用指南去寻找可以使用的枚举类型。

比如说我使用GPIO的0号引脚,那么我就使用红框框中的参数。

一切准备就绪,我们就可以开始中断了,最后一个问题就是中断处理函数,和STM32一样,我们去启动文件中的汇编文件里寻找。

示例代码

#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "OLED.h"int count=0;void EXTI0_1_IRQHandler(void){if(exti_interrupt_flag_get(EXTI_0) == SET){        //获取中断线0的标志位if(!gpio_input_bit_get(GPIOA,GPIO_PIN_0)){     //消抖处理delay_ms(15);gpio_bit_toggle(GPIOA, GPIO_PIN_5);count++;}exti_interrupt_flag_clear(EXTI_0);              //清除标志位}
}int main(void){systick_config();       //延时函数初始化OLED_Init();rcu_periph_clock_enable(RCU_GPIOA);         //打开GPIOA的外设时钟rcu_periph_clock_enable(RCU_CFGCMP);        //配置系统时钟gpio_mode_set(GPIOA,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_5);            //GPIOA5输出模式gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_2MHZ,GPIO_PIN_5);   gpio_mode_set(GPIOA,GPIO_MODE_INPUT,GPIO_PUPD_PULLDOWN,GPIO_PIN_0);         //GPIOA0下拉输入模式nvic_irq_enable(EXTI0_1_IRQn, 1);                                           //NVIC分配优先级syscfg_exti_line_config(EXTI_SOURCE_GPIOA,EXTI_SOURCE_PIN0);                //将GPIO口映射到中断线上exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);                       //EXTI初始化exti_interrupt_enable(EXTI_0);                                              //中断使能while(1){OLED_ShowNum(1,1,count,2);delay_ms(1000);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

n的阶乘(函数)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明n的阶乘函数fac; int fac(int n);int main() {//初始化变量值&#xff1b;int n, result;//获取要阶乘的数&#xff1b;printf("请输入要阶乘的n&…

Python中进程类Process的方法与属性的使用示例

一、示例代码&#xff1a; from multiprocessing import Process import time import osdef child_1(interval):print(子进程&#xff08;%s&#xff09;开始执行&#xff0c;父进程为&#xff08;%s&#xff09; % (os.getpid(), os.getppid()))t_start time.time()time.sle…

shell脚本中条件语句

一.test测试 在Shell脚本中&#xff0c;test命令用于进行条件测试。它也可以通过方括号[]来表示&#xff0c;因为test实际上是[命令的一个别名。 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 注意[ ]空格&#xff0c;否则会失败 测试 是否成功使用…

【opencv】图像处理(二)

前文指引 一、使用到的图片 一、梯度计算 原始图片 img cv2.imread(circle.jpg)plt.imshow(img) plt.show()sobel算子 使用两个核 Gx [[-1,0,1], [-2,0,2], [-1,0,1]] Gy [[-1,-2,-1], [0,0,0], [1,2,1]] dst cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth 深度 -1d…

域控安全 ----> Ntds.dit文件抓取

大家还记得内网渗透的初衷吗&#xff1f;&#xff1f;&#xff1f; 找到域馆&#xff0c;拿下域控&#xff01;&#xff01; 拿下了域控就是拿下了整个域&#xff01;&#xff01; 但是大家知道拿下域环境之后应该怎么操作吗(灵魂拷问)&#xff1f;&#xff1f;&#xff1f; …

GCP谷歌云有什么数据库类型,该怎么选择

GCP谷歌云提供的数据库类型主要包括&#xff1a; 关系型数据库&#xff1a;这类数据库适用于结构化数据&#xff0c;通常用于数据结构不经常发生变化的场合。在GCP中&#xff0c;关系型数据库选项包括Cloud SQL和Cloud Spanner。Cloud SQL提供托管的MySQL、PostgreSQL和SQL Se…

提升文本到图像模型的空间一致性:SPRIGHT数据集与训练技术的新进展

当前的T2I模型&#xff0c;如Stable Diffusion和DALL-E&#xff0c;虽然在生成高分辨率、逼真图像方面取得了成功&#xff0c;但在空间一致性方面存在不足。这些模型往往无法精确地按照文本提示中描述的空间关系来生成图像。为了解决这一问题&#xff0c;研究人员进行了深入分析…

vue + element-plus 开发中遇到的问题

1.问题之路由守卫 初写路由守卫&#xff0c;对于next()的理解不是很透彻&#xff0c;就想着都放行&#xff0c;不然看不到效果&#xff0c;结果控制台出现了警告&#xff0c;想着报黄的问题就不是问题&#xff0c;但仔细一看发现他说&#xff0c;如果再生产阶段就会失败&#x…

STM32(开篇总结)

STM32介绍 STM32是意法半导体公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异片上资源丰富、功耗低&#xff0c;是一款经典的嵌入式微控制器…

数据可视化(十二):Pandas太阳黑子数据、图像处理——离散极值、核密度、拟合曲线、奇异值分解等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

SpringSecurity的核心原理使用总结

1. SpringSecurity的核心原理 对于最原始Servlet请求处理的层次结构 客户端->过滤器链->Servlet 对于在SpringMVC中处理请求的层次结构 如何让Filter与Spring建立连接呢? 因此它增加了一个DelegatingFilterProxy 它是SpringMVC提供的的Filter,它内部代理了一个原生的F…

Spring框架概述

目录 1. Spring框架的起源 2. Spring框架的构成 3. Spring的发展历程 4. Spring的开发环境 4.1. Maven安装与配置 &#xff08;1&#xff09;Maven的下载与安装 &#xff08;2&#xff09;配置Maven的环境变量 &#xff08;3&#xff09;本地仓库的配置 &#xff08;4…

景联文科技:用高质量数据采集标注赋能无人机技术,引领无人机迈入新纪元!

随着无人机技术的不断发展与革新&#xff0c;它已成为现代社会中一个前景无限的科技领域。 无人机应用领域 边境巡逻与安防&#xff1a;边境管理部门利用无人机监控边境线&#xff0c;防止非法越境和其他安全威胁&#xff0c;同时也能监控地面安保人员的工作状态和行动路线。 …

JVM的垃圾回收算法有哪些?从可达性分析算法开始,深入解读三大核心垃圾回收算法

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 一、概念准备 1.1 GC Roots 1.2 可达性分析算法 1.3 非可达对象被回收过程中的两次标记 1.4…

vue从入门到精通(一):初始Vue

一&#xff0c;Vue是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代…

质量保障之精准测试!

一、背景与概念 随着软件测试行业的长足发展&#xff0c;测试理念、技术都在发生着日新月异的变化。因此一套完整的自动化测试用例对于每个软件公司都是不可或缺的&#xff0c;然而虽然有如此规模宏大的自动化案例集资源投入&#xff0c;同时也有大量人力的投入&#xff0c;但…

虚拟仿真云平台在教育应用中的优势和意义

虚拟仿真云实验教学平台作为一种新型的教学方法&#xff0c;近年来在高校教育中得到了十分广泛的应用。它通过模拟真实的实验场景和实验操作&#xff0c;让学生在计算机上进行实验操作和数据处理&#xff0c;为学生提供了更加便捷、可靠、有效的实验学习环境。本文&#xff0c;…

Python如何绘制直流电机开闭环特性曲线?matplotlib

import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [FangSong] # 指定默认字体 mpl.rcParams[axes.unicode_minus] False # 解决保存图像是负号-显示为方块的问题# 数据集1 n1 [1206, 1174, 1141, 1116, 1037, 986] Id1 [0.505, 0.55…

【多模态】30、GPT4V_OCR | GPT4V 在 OCR 数据集上效果测评

文章目录 一、背景二、测评2.1 场景文本识别2.2 手写文本识别2.3 手写数学公式识别2.4 图表结构识别&#xff08;不考虑单元格中的文本内容&#xff09;2.5 从内容丰富的文档中抽取信息 三、讨论 论文&#xff1a;EXPLORING OCR CAPABILITIES OF GPT-4V(ISION) : A QUANTITATIV…

centos7.6安装mysql

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1.在网页中寻找mysql…