GD32F103VE外部中断

GD32F103VE外部中断线线0~15,对应外部IO口的输入中断。它有7个中断向量,外部中断线0 ~ 4分别对应EXTI0_IRQn ~ EXTI4_IRQn中断向量;外部中断线 5 ~ 9 共用一个 EXTI9_5_IRQn中断向量;外部中断线10~15 共用一个 EXTI15_10_IRQn中断向量。

7个中断向量:EXTI0_IRQn,EXTI1_IRQn,EXTI2_IRQn, EXTI3_IRQn, EXTI4_IRQn,EXTI9_5_IRQn和EXTI15_10_IRQn。

这7个中断向量对应7个中断服务函数: EXTI0_IRQHandler(),EXTI1_IRQHandler(),EXTI2_IRQHandler() ,EXTI3_IRQHandler(),EXTI4_IRQHandler(),EXTI9_5_IRQHandler(),EXTI15_10_IRQHandler();

测试程序如下:

#include "KEY.h"
#include "LED.h"/*
GD32F103VE外部中断线线0~15,对应外部IO口的输入中断。
它有7个中断向量,外部中断线0 ~ 4分别对应EXTI0_IRQn ~ EXTI4_IRQn中断向量;
外部中断线 5 ~ 9 共用一个 EXTI9_5_IRQn中断向量;外部中断线10~15 共用一个EXTI15_10_IRQn中断向量。
7个中断向量:EXTI0_IRQn,EXTI1_IRQn,EXTI2_IRQn, EXTI3_IRQn, EXTI4_IRQn,EXTI9_5_IRQn和EXTI15_10_IRQn。
这7个中断向量对应7个中断服务函数:
EXTI0_IRQHandler();
EXTI1_IRQHandler();
EXTI2_IRQHandler();
EXTI3_IRQHandler();
EXTI4_IRQHandler();
EXTI9_5_IRQHandler();
EXTI15_10_IRQHandler();
*/void ExternalInterrupt3_Init(void);
void ExternalInterrupt7_Init(void);
void ExternalInterrupt13_Init(void);//函数功能:初始化ExternalInterrupt3
void ExternalInterrupt3_Init(void)
{//NVIC_PRIGROUP_PRE4_SUB0:抢占优先级为4bit(取值为0~15),子优先级为0bit(没有响应优先级)//NVIC_PRIGROUP_PRE3_SUB1:抢占优先级为3bit(取值为0~7),子优先级为1bit(取值为0~1)//NVIC_PRIGROUP_PRE2_SUB2:抢占优先级为2bit(取值为0~3),子优先级为2bit(取值为0~3)//NVIC_PRIGROUP_PRE1_SUB3:抢占优先级为1bit(取值为0~1),子优先级为3bit(取值为0~7)//NVIC_PRIGROUP_PRE0_SUB4:抢占优先级为0bit(没有抢占优先级),子优先级为3bit(取值为0~15)nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);//设置系统中断优先级"抢占优先级为4bit,子优先级为0bit"nvic_irq_enable(EXTI3_IRQn, 2U, 0U);//设置EXTI3_IRQn的中断优先级,抢占优先级为2,子优先级为0rcu_periph_clock_enable(RCU_GPIOE);//使能GPIOE时钟,enable GPIO clockrcu_periph_clock_enable(RCU_AF);   //外部中断,需要使能复用功能时钟gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);//将GPIOE3设置为浮空输入gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE, GPIO_PIN_SOURCE_3);//设置GE3引脚为外部中断源,select GPIO pin exti sourcesexti_init(EXTI_3, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//配置外部中断线使用外部中断3(EXTI_3)//中断模式为外部中断(EXTI_INTERRUPT)//中断触发方式为下降沿中断(EXTI_TRIG_FALLING)exti_interrupt_flag_clear(EXTI_3);//清除外部中断3标志exti_interrupt_enable(EXTI_3);//使能外部中断3(EXTI_3)
}//函数功能:外部中断3的中断服务函数,外部中断0~外部中断4具有独立的中断入口地址
void EXTI3_IRQHandler(void)
{FlagStatus ret;ret=exti_interrupt_flag_get(EXTI_3);//读取外部中断3(EXTI_3)的中断标志//get EXTI lines flag when the interrupt flag is setif(RESET != ret){MCU_Led_Toggle();exti_interrupt_flag_clear(EXTI_3);}
}//函数功能:初始化ExternalInterrupt7
void ExternalInterrupt7_Init(void)
{rcu_periph_clock_enable(RCU_GPIOE);//使能GPIOE时钟,enable GPIO clockrcu_periph_clock_enable(RCU_AF);//使能复用功能时钟gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);//将GPIOE7设置为浮空输入nvic_irq_enable(EXTI5_9_IRQn, 2U, 0U);//设置EXTI5_9_IRQn的中断优先级,抢占优先级为2,子优先级为0gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE, GPIO_PIN_SOURCE_7);//设置GE7引脚为外部中断源,select GPIO pin exti sourcesexti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//配置外部中断线使用外部中断7(EXTI_7)//中断模式为外部中断(EXTI_INTERRUPT)//中断触发方式为下降沿中断(EXTI_TRIG_FALLING)exti_interrupt_flag_clear(EXTI_7);//清除外部中断7标志exti_interrupt_enable(EXTI_7);//使能外部中断7(EXTI_7)
}//this function handles external lines 5 to 9 interrupt request
//函数功能:外部中断5~外部中断9的中断服务函数
void EXTI5_9_IRQHandler(void)
{FlagStatus ret;ret=exti_interrupt_flag_get(EXTI_7);//读取外部中断7(EXTI_7)的中断标志//get EXTI lines flag when the interrupt flag is setif(RESET != ret){MCU_Led_Toggle();exti_interrupt_flag_clear(EXTI_7);}
}//函数功能:初始化ExternalInterrupt13
void ExternalInterrupt13_Init(void)
{rcu_periph_clock_enable(RCU_GPIOE);//使能GPIOE时钟,enable GPIO clockrcu_periph_clock_enable(RCU_AF);//使能复用功能时钟gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_13);//将GPIOE13设置为浮空输入nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U);//设置EXTI10_15_IRQn的中断优先级,抢占优先级为2,子优先级为0gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE, GPIO_PIN_SOURCE_13);//设置GE13引脚为外部中断源,select GPIO pin exti sourcesexti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//配置外部中断线使用外部中断13(EXTI_13)//中断模式为外部中断(EXTI_INTERRUPT)//中断触发方式为下降沿中断(EXTI_TRIG_FALLING)exti_interrupt_flag_clear(EXTI_13);//清除外部中断13标志exti_interrupt_enable(EXTI_13);//使能外部中断13(EXTI_13)
}//this function handles external lines 10 to 15 interrupt request
//函数功能:外部中断10~外部中断15的中断服务函数
void EXTI10_15_IRQHandler(void)
{FlagStatus ret;ret=exti_interrupt_flag_get(EXTI_13);//读取外部中断13(EXTI_13)的中断标志//get EXTI lines flag when the interrupt flag is setif(RESET != ret){MCU_Led_Toggle();exti_interrupt_flag_clear(EXTI_13);}
}

#include "LED.h"void LED_Init(void);//函数功能:初始化MCU_Led
void LED_Init(void)
{rcu_periph_clock_enable(RCU_GPIOD);//使能GPIOD时钟,enable GPIO clockgpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);//将GPIOD15设置为输出上拉MCU_Led_Off();
//	GPIO_BC(GPIOD) = GPIO_PIN_15;//清除GPIOD15输出,GPIO bit clear register
}
#ifndef __LED_H
#define __LED_H#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t#define MCU_Led_Off()  GPIO_BOP(GPIOD)=GPIO_PIN_15  //GD15输出高电平
#define MCU_Led_On() GPIO_BC(GPIOD)=GPIO_PIN_15   //GD15输出低电平
#define MCU_Led_Toggle() gpio_bit_write( GPIOD,GPIO_PIN_15,(bit_status)((1-gpio_input_bit_get(GPIOD,GPIO_PIN_15))) )
//GD15取反输出电平extern void LED_Init(void);#endif

 

测试时,按下连接到PE3,PE7和PE13的按钮,就可以实现LED灯反转。

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

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

相关文章

5 小时玩转阿里云 Flink 实时湖仓,速速报名!

阿里云 Flink 专家与传智教育高级顾问联合出品,5 小时玩转阿里云 Flink 实时湖仓,项目依托于传智教育博学谷线上教育平台数字化建设场景,真实还原实时计算业务细节,学完后掌握基于阿里云的 Flink CDC,Paimon&#xff0…

前台自动化测试:基于敏捷测试驱动开发(TDD)的自动化测试原理

一、自动化测试概述 自动化测试主要应用到查询结果的自动化比较,把借助自动化把相同的数据库数据的相同查询条件查询到的结果同理想的数据进行自动化比较或者同已经保障的数据进行不同版本的自动化比较,减轻人为的重复验证测试。多用户并发操作需要自动…

【雕爷学编程】Arduino动手做(194)---makeblock mbot 主控板

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

洪水肆虐京津冀,救灾新闻别虚假

在洪水肆虐京津冀的今天,本“人民体验官”将要推广人民日报官方微博文化产品《辛苦了!子弟兵蹚淤泥推舟为村民送物资》,并联系各方媒体的相关报道夹叙夹议。 图:来源“人民体验官”推广平台 人民微博用正能量语气告诉朝野上下&am…

Linux进程信号

全文目录 概念什么是Linux信号?信号行为(core dump)如何理解信号被进程保存:信号发送的本质: 产生信号1. 终端按键(组合键)变成信号:2. 通过系统调用接口向进程发送信号3. 软件条件产…

模拟实现消息队列项目(系列3) -- 服务器模块(硬盘管理)

目录 前言 1. 创建项目 2. 创建核心类 2.1 Exchange 2.2 MSQueue 2.3 Binding 2.4 Message 3. 数据库设计 3.1 SQLite 配置 3.2 Mapper层代码实现 3.2.1 创建表操作 3.2.2 交换机 队列 绑定的增加和删除 3.3 实现DataBaseManager 3.4 DataBaseManager单元测试 4.…

“他“是怎么拿offer的?全网最全,性能测试面试题+答案(超全整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、什么是负载测试…

R语言3_安装SeurateData

环境Ubuntu22/20, R4.1 在命令行中键入, apt-get update apt install libcurl4-openssl-dev libssl-dev libxml2-dev libcairo2-dev libgtk-3-dev # libcairo2-dev :: systemfonts # libgtk :: textshaping进入r语言交互环境,键入, instal…

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转, 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用,使用递归互斥信号量,但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…

Git仓关联多个远程仓路径

前言 Git仓如果需要将代码push到多个仓,常用的做法是添加多个远程仓路径,然后分别push。这样虽然可以实现目的,但是需要多次执行push指令,很麻烦。 本文介绍关联多个远程仓路径且执行一次push指令的方法:git remote …

conda 环境 numpy 安装报错需要 Microsoft Visual C++ 14.0

到公司装深度学校环境。项目较旧,安装依赖,一堆报错(基于 conda 环境): numpy 安装报需要 C 14.0 No module named numpy.distutils._msvccompiler in numpy.distutils; trying from distutilserror: Microsoft Visu…

Maven-生命周期及命令

关于本文 ✍写作原因 之前在学校学习的时候,编写代码使用的项目都是单体架构,导入开源框架依赖时只需要在pom.xml里面添加依赖,点一下reload按钮即可解决大部分需求;但是在公司使用了dubbo微服务架构之后发现只知道使用reload不足…

COSV Schema 1.0正式对外发布,棱镜七彩参与制定工作

近期,CCF版开源漏洞信息描述规范COSV Schema 1.0正式制定并对外发布,棱镜七彩参与制定工作。 图 COSV Schema 1.0制定过程贡献单位及专家名单 作为开源软件治理与软件供应链安全领域的先行者,棱镜七彩一直致力于提升开源效能、防范开源漏洞。…

一起学数据结构(3)——万字解析:链表的概念及单链表的实现

上篇文章介绍了数据结构的一些基本概念,以及顺序表的概念和实现,本文来介绍链表的概念和单链表的实现,在此之前,首先来回顾以下顺序表的特点: 1.顺序表特点回顾: 1. 顺序表是一组地址连续的存储单元依次存…

FL Studio21高级中文版本下载及切换中文语言教程

FL Studio对新人有极高的友好度,成为编曲软件的入门首选!FL Studio官方提供多达31款各类插件,令你编曲功力大涨!FL Studio是超多顶级音乐人的启蒙首选!包括百大DJ冠军Martin Garrix,六获格莱美提名的Deadma…

Java入门2022黑马-200-1

1-5 常用cmd命令 dir可以查看隐藏的文件, exit 退出 6-20 20-30 30-40 37 三元表达式 switch新特性 统计 while continue break 50

ELK企业级日志分析系统

目录 一、ELK 概述 1.ElasticSearch 2.Kiabana 3.Logstash 可以添加的其它组件 1.Filebeat 2.Fluentd 三、为什么要使用 ELK 四、ELK 的工作原理 五、 ELK Elasticsearch 集群部署 更改主机名、配置域名解析、查看Java环境 部署 Elasticsearch 软件 修改elasticsearc…

怎么合并多个视频?简单视频合并方法分享

合并多个视频可以将它们组合成一个更长的视频,这对于需要播放多个短视频的情况非常有用。此外,合并视频还可以使视频编辑过程更加高效,因为不必将多个独立的视频文件分别处理。最后,合并视频可以减少文件数量,从而使整…

K8S系列文章之 Kind 部署K8S的 服务发布

安装kind 下载 https://github.com/kubernetes-sigs/kind/releases/download/0.17.0/kind-linux-amd64 执行以下命令: mv kind-linux-amd64 /usr/local/bin/kind chmod 777 /usr/local/bin/kind 之前需要先在本地主机安装好docker yum -y install yum-utils d…

vscode Google代码风格设置无效解决

1. 采用第一个方法设置google代码设置风格 2. 安装了clangd后需要在格式化风格做选择 vscode 安装 clang-format插件 $ code /home/tony/.config/Code/User/settings.json 这就能解决google风格设置无效的问题了,原来根因在于使用的格式化插件没有生效导致&#xf…