立创·天空星开发板-GD32F407VE-EXTI

本文以 立创·天空星开发板-GD32F407VET6-青春版 作为学习的板子,记录学习笔记。

立创·天空星开发板-GD32F407VE-EXTI

    • 中断
    • 硬件触发中断示例
    • 软件触发中断示例

中断

中断分为内部中断和外部中断

外部中断是由外部设备(如按键、传感器、通信接口等)产生的中断请求信号,需要通过中断控制器进行处理。

通常情况下,外部中断是通过中断输入引脚连接到中断控制器,由中断控制器检测到外部中断请求,然后触发相应的中断服务程序进行处理。

内部中断是由处理器内部产生的中断请求信号,通常是由串口、定时器、DMA控制器、系统时钟等硬件设备产生的中断请求,需要通过中断控制器进行处理。

与外部中断不同的是,内部中断不需要外部设备的触发,而是由硬件设备自身产生中断请求,由中断控制器检测到并触发相应的中断服务程序进行处理。

中断思维导图

硬件触发中断示例

使用外部中断来检测 PA0 的电平变化。代码如下:

#include "gd32f4xx.h"
#include "systick.h"#include "ExtendedUSART.h"// 核心板 PA0 引脚触发中断的配置
void EXTI0_config() {// PA0rcu_periph_clock_enable(RCU_GPIOA);gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);// SYSCFGrcu_periph_clock_enable(RCU_SYSCFG);syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);// NVICnvic_irq_enable(EXTI0_IRQn, 2, 2);// EXTIexti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);exti_interrupt_enable(EXTI_0);exti_interrupt_flag_clear(EXTI_0);
}void EXTI0_IRQHandler() {if(SET == exti_interrupt_flag_get(EXTI_0)) {exti_interrupt_flag_clear(EXTI_0);if(RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_0)) {printf("EXTI_0 interrupted by PA0 released!");} else {printf("EXTI_0 interrupted by PA0 pressed!");}}
}int main(void) {systick_config();EXTI0_config();USART0_config();USART0_send_string("GD32 is running!\r\n");while(1) { }
}

软件触发中断示例

#include "gd32f4xx.h"
#include "systick.h"#include "ExtendedUSART.h"// 软件触发中断的配置
void EXTI2_config() {// NVICnvic_irq_enable(EXTI2_IRQn, 2, 2);// EXTIexti_init(EXTI_2, EXTI_INTERRUPT, EXTI_TRIG_NONE);exti_interrupt_enable(EXTI_2);exti_interrupt_flag_clear(EXTI_2);
}void EXTI2_IRQHandler() {if(SET == exti_interrupt_flag_get(EXTI_2)) {exti_interrupt_flag_clear(EXTI_2);printf("EXTI_2 interrupted!\n");}
}void USART0_on_received(uint8_t* dat, uint32_t len) {printf("received data: %s. ", dat);// 当串口收到数据后。手动触发中断exti_software_interrupt_enable(EXTI_2);
}int main(void) {systick_config();EXTI2_config();USART0_config();USART0_send_string("GD32 is running!\r\n");while(1) { }
}

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

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

相关文章

rollup.js(入门篇)

前沿 Rollup 是一个用于 JavaScript 的模块打包工具,它将小的代码片段编译成更大、更复杂的代码,例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式,而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许…

如何在Python中处理时间和日期

在Python中处理时间和日期,我们通常使用内置的datetime模块。这个模块提供了类来操作日期和时间,包括date、time、datetime、timedelta以及tzinfo。以下是datetime模块的一些基本用法: 1. 获取当前日期和时间 python复制代码 from datetime…

Linux编程for、while循环if判断以及case语句用法

简介 语法描述if条件语句if else条件判断语句if else-if else多条件判断语句for循环执行命令while循环执行命令until直到条件为真时停止循环case ... esac多选择语句break跳出循环continue跳出当前循环 1. for 循环 for语句,定量循环,可以遍历一个列表…

一文读懂AI时代GPU的内存新宠-HBM

一文读懂GPU最强辅助:HBM HBM,即高带宽内存,是一项领先的3D堆叠DRAM技术,专为高性能计算和图形处理单元(GPU)设计,满足其对内存带宽和容量的极致需求。该技术由AMD与海力士携手研发,…

Apache安装教程

目录 一、Apache知识点 Apache服务简介 Apache下载网址 Apache的主要特点 二、Apache服务的搭建 1. 关闭防火墙 2. 安装依赖环境以及编译工具 3. 将apache安装包拖入xshell内 4. 解压压缩包 5. 进入httpd主包 6. 指定安装路径,启用字符集支持等 7. 优化执…

重庆工商大学社会工作专业试题及答案,分享几个实用搜题和学习工具 #媒体#学习方法#知识分享

搜题软件一般都是通过识别题目内容搜索出问题的答案,当识别内容不正确或搜索不到答案时,又得重新到其他软件进行重复的操作,很是麻烦。所以我们可以使用专业的识别工具,对题目内容进行识别,然后把提取出来的内容单独保…

流量录制学习

AREX Cloud | AREX (arextest.com) 流量录制学习,比vivo的moonbox要好用

android 异屏同显二.

android主屏: android副屏 | | mediaProjection ----SufaceTextrue ---Open…

【数据结构】平衡二叉树左旋右旋与红黑树

平衡二叉树左旋右旋与红黑树 平衡二叉树 定义 平衡二叉树是二叉搜索树的一种特殊形式。二叉搜索树(Binary Search Tree,BST)是一种具有以下性质的二叉树: 对于树中的每个节点,其左子树中的所有节点都小于该节点的值…

【vector模拟实现】附加代码讲解

vector模拟实现 一、看源代码简单实现1. push_backcapacity(容量)sizereserve(扩容)operator[ ] (元素访问) 2. pop_back3. itorator(迭代器)4.insert & erase (头插…

哈夫曼树的创建

要了解哈夫曼树,可以先了解一下哈夫曼编码,假设我们有几个字母,他们的出现频率是A: 1 B: 2 C: 3 D: 4 E: 5 F: 6 G: 7。那么如果想要压缩数据的同时让访问更加快捷,就要让频率高的字母离根节点比较进,容易访问&#xf…

立创·天空星开发板-GD32F407VE-GPIO

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子,记录学习笔记。 立创天空星开发板-GD32F407VE-GPIO 基础概念三极管MOS管 GPIO输出模式输出线与GPIO输入模式GPIO点灯 基础概念 GPIO,全称为“通用输入/输出”(General Purpose …

算法金 | 这次终于能把张量(Tensor)搞清楚了!

大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 1. 张量(Tensor)基础概念 1.1 张量的定义与重要性 张量是深度学习中用于表示数据的核心结构,它可以视…

《帝国时代 III:决定版》秘籍 怎么在苹果电脑上玩《帝国时代 III:决定版》

《帝国时代 III:决定版》是一款让玩家沉浸于历史长河体验从大航海时代到工业革命时期的游戏。下面我们来看看《帝国时代 III:决定版》是什么类型的游戏,《帝国时代 III:决定版》Mac安装教程的相关内容。 一、《帝国时代 III&…

【BOM02】本地存储

一:什么是本地存储 数据存储在用户浏览器中,用户设置、读取方便,同时页面刷新时不会丢失数据。存储在浏览器中数据约5M,分为sessionStorage和localStorage两种存储方式 二:localStorage存储 作用 将数据永久存储在…

opencv实战小结-银行卡号识别

实战1-银行卡号识别 项目来源:opencv入门 项目目的:识别传入的银行卡照片中的卡号 难点:银行卡上会有一些干扰项,如何排除这些干扰项,并且打印正确的号码是一个问题 最终效果如上图 实现这样的功能需要以下几个步骤…

基于Amazon Linux使用pip安装certbot并使用Apache配置证书的完整步骤

配置证书 1. 更新系统和安装必要的软件包 首先,确保系统和包管理器是最新的: sudo dnf update -y sudo dnf install -y python3 python3-pip python3-virtualenv httpd mod_ssl2. 创建并激活虚拟环境 为了避免依赖冲突,使用virtualenv创建…

算法导论实战(三)(算法导论习题第二十四章)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀算法启示录 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 第二十四章 24.1-3 24.1-4 2…

笔记:DST与HPPC测试方法

一、DST测试方法: DST全称为Dynamic Stress Test,是一种动态压力测试方法,主要用于评估电池在实际使用条件下的综合性能,模拟了车辆在行驶过程中可能会遇到的各种动态负载变化,如加速、减速、怠速等工况。 它的目的是评估电池在…

setattr前端接收方法深度解析

setattr前端接收方法深度解析 在前端开发中,setattr可能是一个较为陌生的概念,但它却在某些场景下扮演着关键角色。setattr是一个Python内置函数,用于设置对象属性的值。然而,在前端与后端交互的过程中,我们有时需要处…