GD32F103单片机-EXTI外部中断

news2024/11/13 16:40:33

GD32F103单片机-EXTI外部中断

  • 一、EXTI及NVIC介绍
  • 二、编程实验
    • 2.1 相关库函数
    • 2.2 实验代码

一、EXTI及NVIC介绍

  • GD32和STM32的EXTI基本相似,具体见STM32F1单片机-外部中断
  • GD32的EXTI包括20个相互独立的边沿检测电路请求产生中断或事件,4位优先级配置寄存器16个优先等级
  • GD32的EXTI有三种触发方式上升沿下降沿任意沿触发
  • 如下图为EXTI框图,通过EXTI_Line0-19(IO的16个管脚和内部模块的4根线)一共20条线路进入到边沿检测,或通过软件触发,最终通过中断屏蔽控制(挂起标志位-指示有中断发生,不意味着中断处理已经完成)到NVIC产生中断或者产生事件

在这里插入图片描述

  • 下图为EXTI触发源对应表

在这里插入图片描述

  • NVIC见STM32F1单片机-EXTI外部中断

二、编程实验

2.1 相关库函数

  • 下面是GD32F103关于EXTI和NVIC相关的库函数
void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin);//外部中断源引脚选择
void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type);//外部中断初始化,通道,极性选择
void exti_interrupt_enable(exti_line_enum linex);//外部中断使能
FlagStatus exti_flag_get(exti_line_enum linex);//外部中断挂起标志位获取,指示有中断发生,不意味着中断处理已经完成
void exti_flag_clear(exti_line_enum linex);//清楚外部中断挂起标志位
FlagStatus exti_interrupt_flag_get(exti_line_enum linex);//外部中断标志位获取
void exti_interrupt_flag_clear(exti_line_enum linex);//清除外部中断标志位
void nvic_priority_group_set(uint32_t nvic_prigroup);//配置NVIC优先级分组
void nvic_irq_enable(uint8_t nvic_irq, uint8_t nvic_irq_pre_priority, uint8_t nvic_irq_sub_priority);//初始化NVIC,中断通道,抢占优先级和子优先级(响应优先级)
//中断服务函数入口在:startup_gd32f10x_md.s中
//枚举中断号IRQn在gd32f10x.h中

2.2 实验代码

  • 外部中断基本步骤如下:开启GPIO、AFIO时钟初始化GPIO外部中断引脚选择初始化EXTI和NVIC使能EXTI — 进入EXTI中断服务函数(判断中断标志位)
  • 使用触摸按键去模拟外部中断,触摸按键原理图如下所示
  • TTP223作为一款触摸检测IC、提供一个触摸按键,OUT_1接到PA0
  • Q是CMOS输出引脚、VS是接地,VDD电源,I是触摸输入,AHLB是输出有效选择(0表示高电平有效1表示低电平有效),TOB是输出模式选择(0表示直接模式1表示触发模式)。所以本图中表示的是直接模式低电平有效输出

在这里插入图片描述

  • 触摸按键部位有个感应电容,当触摸到按键部分时,会与C13电容并联使得输入I的电容变大,OUT_1输出低电平,松手时,OUT_1输出高电平,触摸期间一直输出低电平
    在这里插入图片描述
  • 实验内容:按下触摸按键A,实现LED的状态反转
  • 下面是My_EXTI.c
  • 中断服务函数不需要声明,main函数调用LED、EXTI初始化函数即可
#include "gd32f10x.h"                   // Device header
#include "LED.h"

/*
@brief:初始化EXTI
@param:无
@retval:无
*/
void My_EXTI_Init()
{
	rcu_periph_clock_enable(RCU_GPIOA);
	rcu_periph_clock_enable(RCU_AF);	//开启GPIOA,AFIO时钟
	gpio_init(GPIOA,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_0);//PA0上拉输入
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA,GPIO_PIN_SOURCE_0);//AFIO设置PA0为EXTI触发源
	exti_init(EXTI_0,EXTI_INTERRUPT,EXTI_TRIG_FALLING);//通道0,下降沿触发外部中断
	exti_interrupt_enable(EXTI_0);//使能EXTI
	nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);//NVIC分组
	nvic_irq_enable(EXTI0_IRQn,1,1);//配置NVIC,中断通道,抢占和子优先级为1
}

/*
@brief:EXTI中断服务函数
@param:无
@retval:无
*/
void EXTI0_IRQHandler()
{
	if(exti_interrupt_flag_get(EXTI_0) == SET)//判断中断标志位
	{
		LED1_Turn();
		exti_interrupt_flag_clear(EXTI_0);//清除中断标志位
	}
}

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

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

相关文章

热像仪是如何工作的?

红外热像仪是一种非接触式设备,能够检测红外能量(热量)并将其转变成可见光图像。让我们深入了解红外热像仪的科学原理,以及借助红外热像仪我们能够看到的隐形世界。 捕捉红外波,而不是可见光 首先必须清楚的是&#…

windows环境下配置MySQL主从启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘

文章目录 问题解决方法 问题 今天在windows环境下配置MySQL主从同步,在修改my.ini文件后发现MySQL启动失败了 打开my.ini检查参数发现没有问题 [mysqld] #开启二进制日志,记录了所有更改数据库数据的SQL语句 log‐bin mysql‐bin #设置服务id&#x…

Vue(13)——router-link

router-link vue-router提供了一个全局组件router-link(取代a标签) 能跳转,配置to属性指定路径(必须)。本质还是a标签。默认会提供高亮类名,可以直接设置高亮样式 右键检查,发现多了两个类: 可以直接写样式…

Java数据结构专栏介绍

专栏导读 在软件工程的世界里,数据结构是构建高效、可靠程序的基石。"Java数据结构"专栏致力于为Java开发者提供一个全面、深入的学习平台,帮助他们掌握各种数据结构的原理、实现及其在Java中的应用。通过这个专栏,读者将能够提升…

IPsec-Vpn

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip address

分布式Id生成策略-美团Leaf

之前在做物流相关的项目时候,需要在分布式系统生成运单的id。 1.需求: 1.全局唯一性:不能出现重复的ID。(基本要求) 2.递增:大多数关系型数据库(如 MySQL)使用 B 树作为索引结构。…

web前端-HTML常用标签-综合案例

如图&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document&…

mysql时间戳格式化yyyy-mm-dd

格式化到 年月日 # 将时间换成列名就行&#xff1b;当前是秒级时间戳&#xff0c;如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

Linux 系统进程理解——标识符,状态

目录 进程描述-pcb 并行与并发 概念&#xff1a; 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等 内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体 这短短的两行就概括了进程&#xff0c;但是进程的内在…

Mysql分组取最新一条记录

文章目录 Mysql分组取最新一条记录1. 数据准备1. 方法1&#xff1a;使用子查询获取每个组的最大时间戳&#xff0c;然后再次查询获取具体记录&#xff08;如果时间戳是唯一的&#xff09;2. 方法2&#xff1a;使用窗口函数&#xff08;MySQL 8.0&#xff09;3. 方法3&#xff1…

ClickHouse 与 Quickwit 集成实现高效查询

1. 概述 在当今大数据分析领域&#xff0c;ClickHouse 作为一款高性能的列式数据库&#xff0c;以其出色的查询速度和对大规模数据的处理能力&#xff0c;广泛应用于在线分析处理 (OLAP) 场景。ClickHouse 的列式存储和并行计算能力使得它在处理结构化数据查询时极具优势&…

F28335 的外部中断实验

1 外部中断介绍 1.1 外部中断简介 1.2 外部中断相关寄存器 (1)外部中断控制寄存器(XINTnCR) (2)外部 NMI 中断控制寄存器

多模态大模型MiniCPM-V技术学习

目前性价比最高的多模态模型 Minicpm-V-2.6参数8B&#xff0c;int4版本推理显存仅7GB&#xff0c;并且在幻觉数据集上效果好于其他模型&#xff0c;测试下来效果非常好&#xff0c;官方演示里面还给出了手机上端侧运行的图片和视频推理示例 p.s.Qwen2-VL和Minicpm-V-2.6头对头…

从小白到大神:C语言预处理与编译环境的完美指南(上)

从小白到大神&#xff1a;C语言预处理与编译环境的完美指南&#xff08;下&#xff09;-CSDN博客 新鲜出炉~~&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;下篇在这里&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&…

echarts图表刷新

图表制作完成&#xff0c;点击刷新图标&#xff0c;可以刷新。 <div class"full"><div id"funnel" class"normal"></div><div class"refreshs"><div class"titles_pic"><img src"./…

数据飞轮崛起:数据中台真的过时了吗?

一、数据中台的兴起与困境 随着大数据技术的不断发展&#xff0c;我见证了企业数据能力建设的演变。从数据中台的兴起&#xff0c;到如今数据飞轮模式的热议&#xff0c;企业的数据管理理念经历了巨大的变化。起初&#xff0c;数据中台作为解决数据孤岛、打破部门壁垒的“救星…

创新引领未来,Vatee万腾平台助力企业飞跃发展

在日新月异的科技浪潮中&#xff0c;创新已成为推动社会进步和企业发展的核心动力。Vatee万腾平台&#xff0c;作为数字化转型领域的佼佼者&#xff0c;正以其独特的创新理念和强大的技术实力&#xff0c;引领着企业迈向更加辉煌的未来&#xff0c;助力企业实现飞跃式发展。 创…

如何将很多个pdf拼接在一起?很多种PDF拼接的方法

如何将很多个pdf拼接在一起&#xff1f;将多个PDF文件合并不仅能够提升信息的整合性&#xff0c;还能使文件管理更加高效。想象一下&#xff0c;你需要向同事或老师提交一份综合报告&#xff0c;其中包含了多份相关资料。如果每个文件单独存在&#xff0c;查找和传输都会变得繁…

Redis中Hash(哈希)类型的基本操作

文章目录 一、 哈希简介二、常用命令hsethgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloathstrlen 三、命令小结四、哈希内部编码方式五、典型应用场景六、 字符串&#xff0c;序列化&#xff0c;哈希对比 一、 哈希简介 几乎所有的主流编程语言都提供了哈…

(蓝桥杯)STM32G431RBT6(TIM4-PWM)

一、基础配置 这个auto-reload preload是自动重装载值&#xff0c;因为我们想让他每改变一个占空比&#xff0c;至少出现一次周期 Counter Period(Autoreload Regisiter)这个设值为10000&#xff0c;那么就相当于它的周期是10000 脉冲宽度可以设置为占周期的一半&#xff0c;那…