【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);
    }
}


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

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

相关文章

OpenAI 人工智能搜索产品即将推出,文本和图像都支持?!

OpenAI 人工智能搜索产品即将推出 OpenAI 计划于下周一(5 月 13 日)正式公布其人工智能搜索产品,不过报道中强调具体公告日期可能发生变化。OpenAI 拒绝对路透社的报道置评。外媒 The Information 在今年 2 月的报道中指出,OpenAI 一直在秘密开发其自家网络搜索服务,并将获…

C++初阶学习第七弹——探索STL奥秘(二)——string的模拟实现

标准库中的string&#xff1a;C初阶学习第六弹——string&#xff08;1&#xff09;——标准库中的string类-CSDN博客 前言&#xff1a; 在前面我们已经学习了如何使用标准库中的string类&#xff0c;但作为一个合格的程序员&#xff0c;我们不仅要会用&#xff0c;还要知道如…

Midjourney Imagine API 申请及使用

Midjourney Imagine API 申请及使用 申请流程 要使用 Midjourney Imagine API&#xff0c;首先可以到 Midjourney Imagine API 页面点击「Acquire」按钮&#xff0c;获取请求所需要的凭证&#xff1a; 如果你尚未登录或注册&#xff0c;会自动跳转到登录页面邀请您来注册和登…

[嵌入式系统-77]:RT-Thread-快速上手:嵌入式系统调测工具大全

目录 1. JTAG 下载调试器&#xff1a; 2. J-Link 仿真器&#xff1a; 3. ICE&#xff08;In-Circuit Emulator&#xff09;&#xff1a; 4. ROM监视器&#xff08;ROM Monitor&#xff09;&#xff1a; 5. 终端仿真工具&#xff1a; 6. 总线抓取工具&#xff1a; 7. 静态…

【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示 背景需求&#xff1a; 之前的代码吗存在几个问题&#xff0c;最大的问题是不能生成“”长条黑边框”” 【教学类-55-01】20240511图层顺序挑战&#xff08;四格长条纸&#xff09;&#xff08;4*4&#xff09;和“手工纸自制参考图”-CSDN博客文章浏览阅读485次&…

2024第八季完美童模 【星光】品牌赛区 【直通】赛 完美收官

2024年5月1日&#xff0c;春风徐徐的【星光品牌赛区】热闹非凡&#xff0c;备受瞩目的第八季完美童模【星光品牌赛区】赛区【直通赛】在这一天正式拉开了帷幕。比赛现场&#xff0c;童模们身着华服&#xff0c;在舞台上演绎了“亚特兰蒂斯”的时尚主题赛。 参赛选手们身着带有海…

【优先级队列】Leetcode 最后一块石头的重量

题目讲解 1046. 最后一块石头的重量 算法讲解 根据题目的意思&#xff0c;为了寻找到本次数组中的最大的两个值&#xff0c;我们需要使用一个数据结构&#xff1a;堆&#xff0c;使用大堆&#xff0c;每一次出两个数据&#xff0c;这两个数据就是当前数组中的两个最大值&…

拉链表实现过程+案例

第一种 1.从ODS层获取增量数据(上一天新增和更新的数据) 2.拿着DWD原始拉链表数据 left join 增量数据 ,修改原始拉链中历史数据的结束时间 3.拿着left join 的结果集 union all 增量数据 4.把最新的拉链数据优先保存到DWD对应的临时表中 5.使用insertselect 方式把临时表中…

力扣75. 颜色分类

Problem: 75. 颜色分类 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 由于题目只提供0&#xff0c;1&#xff0c;2分别代表颜色红、白、蓝&#xff0c;并按此排序&#xff0c;那么我们可以遍历两次数组&#xff0c;第一次将0&#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…

GEVernova推出GEV新能源平台,引领新能源未来

近日&#xff0c;全球领先的能源设备制造和服务公司 GE Vernova 宣布推出 GEV 新能源平台&#xff0c;这是一个将金融、科技和产业深度融合的全新投资平台。GEV 新能源平台旨在为用户提供一站式可持续新能源投资解决方案&#xff0c;助力全球新能源转型和可持续发展。 新能源已…

车载电子电器架构 —— UDS Service 11介绍

车载电子电器架构 —— UDS Service 11介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

Dev-C++的下载和安装教程(超详细图文,小白入门)

Dev-C&#xff08;或者叫做Dev-Cpp&#xff09;是Windows环境下的一个轻量级C/C集成开发环境&#xff08;IDE&#xff09;。它是一款自由软件&#xff0c;遵守GPL许可协议分发源代码。 Dev-C集合了功能强大的源码编辑器、MingW64/TDM-GCC编译器、GDB调试器和AStyle格式整理器等…

Linux 第二十九章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

k8s job

ReplicaSet 和 DaemonSet 会持续运行任务&#xff0c;永远达不到完成态。但在一个可完成的任务中&#xff0c;其进程终止后&#xff0c;不应该再重新启动。 Job 允许你运行一种 pod&#xff0c;该 pod 在内部进程成功结束时&#xff0c;不重启容器&#xff0c;一旦任务完成&…

【React】redux开发者工具redux-devtools-extension的安装和使用

前言 redux-devtools-extension: 是一个用于Redux的开发者工具扩展。适合用于需要调试和监控Redux应用的状态管理。特点是可以提供实时的状态查看、行动日志和错误检测等 安装 chrome安装redux-devtools-extension 项目中安装并引入redux-devtools-extension yarn add re…

【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…

爆款小红书免费流量体系课程(两周变现),小红书电商教程

课程下载&#xff1a;小红书电商教程-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 10-爆款标题(三段式取标题).mp3 11-爆款封面怎么作图.mp3 12-爆款内容的模板(三段式模板).mp3 13-小红书流量推荐背后的秘密(四大流…

【数据库原理及应用】期末复习汇总高校期末真题试卷11

试卷 一、填空题(每题 1 分&#xff0c;共10 分)    1. 数据库管理技术的发展经历了三个阶段&#xff1a;人工管理阶段&#xff0c;文件系统阶段和__________阶段。 2.实体完整性约束规定__________的取值不能为空值。 3. 计算机系统有三类安全性问题&#xff0c;即_____…

ARM据称将开发AI芯片,计划在2025年秋季开始量产

KlipC报道&#xff1a;软银集团下的芯片设计公司ARM将成立一个AI芯片部门&#xff0c;目标在2025年推出首批产品。 ARM是日本软银旗下的公司&#xff0c;成立34年&#xff0c;一直在科技行业中扮演着不可或缺的角色。此次&#xff0c;ARM将承担初期开发成本&#xff0c;预计将…