STM32F1外部中断EXTI

目录

1.  EXTI简介

2.  EXTI基本结构

3.  AFIO复用IO口

4.  EXTI框图

5.  EXTI程序配置

5.1  首先先配置要使用的GPIO口的引脚

5.2  配置AFIO数据选择器,选择想要中断的引脚

5.3  EXTI配置


1.  EXTI简介

        EXTI(Extern Interrupt)外部中断 EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。

简单来说:电平变化,触发中断

支持的触发方式:上升沿/下降沿/双边沿/软件触发

·上升沿触发
        数字电平从低电平(数字“0”)变为高电平(数字“1”)的那一瞬间叫作上升沿。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。

·下降沿触发
        数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。下降沿触发是当信号有下降沿时的开关动作,当电位由高变低而触发输出变化的就叫下降沿触发。也就是当测到的信号电位是从高到低也就是下降时就触发,叫做下降沿触发。

那么我们可以很好的理解两种触发:

上升沿触发 就是当电压从低变高时触发中断
下降沿触发 就是当电压从高变低时触发中断

双边沿触发

        可以看做上升沿和下降沿的结合,也就是二者都可以触发中断。

软件触发

        引脚没变化,程序执行代码触发中断。

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断

        也就是PA0,PB0,PC0等不能同时使用,Pin引脚需要不同,例如PA0和PA1,PA0和PB1等能同时用。

通道数:16个GPIO_Pin(0~15),外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒

触发响应方式:中断响应/事件响应

中断响应:申请中断,CPU执行中断

事件响应:触发外设,信号不会在到CPU,直接触发其他外设,外设间的联合操作

2.  EXTI基本结构

        每个GPIO都有16个引脚,每个引脚都能触发中断,但是会通过AFIO中断引脚选择的模块,在GPIOA,GPIOB,GPIOC......在16个引脚中选择一个Pin连接。

        相当于在PA0,PB0,PC0......选个0,PA1,PB1,PC1......选个1,依次类推

        其中5~9,还有10~15,分别写在一个函数内,使用过程中还要通过标志位,进一步判断到底是哦哪个中断。

3.  AFIO复用IO口

AFIO主要用于引脚复用功能的选择和重定义

在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

我们要想对PC13和PC14等引脚进行当做普通GPIO口使用则需要AFIO的参与:

	//时钟使能
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE );
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO , ENABLE );
	
	PWR_BackupAccessCmd( ENABLE ); //允许修改RTC和后备寄存器
	RCC_LSEConfig( RCC_LSE_OFF ); //关闭外部低速时钟,PC14+PC15可以用作普通IO
	BKP_TamperPinCmd(DISABLE);  //关闭入侵检测功能,PC13可以用作普通IO

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	PWR_BackupAccessCmd(DISABLE);/* 禁止修改RTC和后备寄存器*/
  //BKP_ITConfig(DISABLE);       /* 禁止TAMPER 中断*/

4.  EXTI框图

5.  EXTI程序配置

5.1  首先先配置要使用的GPIO口的引脚

        进行RCC时钟配置,这里我使用的事PC13和PC14引脚:

	//时钟使能
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE );
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO , ENABLE );
	
	PWR_BackupAccessCmd( ENABLE ); //允许修改RTC和后备寄存器
	RCC_LSEConfig( RCC_LSE_OFF ); //关闭外部低速时钟,PC14+PC15可以用作普通IO
	BKP_TamperPinCmd(DISABLE);  //关闭入侵检测功能,PC13可以用作普通IO

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	PWR_BackupAccessCmd(DISABLE);/* 禁止修改RTC和后备寄存器*/
  //BKP_ITConfig(DISABLE);       /* 禁止TAMPER 中断*/

下面做个了解

用来复位AFIO外设,调用这个函数,AFIO的外设配置就会全部清除:

void GPIO_AFIODeInit(void);

锁定GPIO配置,调用函数,参数指定某一个引脚,该引脚参数就会被锁定,防止以外更改:

void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

用来配置AFIO的时间输出功能:

void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);

引脚重映射:

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

配置AFIO数据选择器,选择想要中断的引脚:

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

以太网外设有关,暂时用不到:

void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

5.2  配置AFIO数据选择器,选择想要中断的引脚

	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource14);	

拓展:

清除配置的EXTI:

void EXTI_DeInit(void);

把参数传递的结构体变量赋一个默认值:

void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);

软件触发外部中断:

void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);

主程序:获取指定函数是否置“1”:

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);

对置“1”的标志位进行清除:

void EXTI_ClearFlag(uint32_t EXTI_Line);

中断函数内进行置“1”和清除:

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

5.3  EXTI配置

	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line = EXTI_Line13 | EXTI_Line14;//指定需要配置的中断线
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;//指定选择的中断线的新状态,开启中断
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//指定外部中断线的模式,中断模式
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发,指定触发信号的有效边沿,Rising上升沿出发
	EXTI_Init(&EXTI_InitStructure);

学习笔记,仅供参考。

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

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

相关文章

Qt创建和使用动态库链接

首先建立库文件 顺序确认完成后,构建完成 注意:上图中mydll_global.h中的内容可以复制到mydll.h中去,在以后调用时只调用mydll.h即可,否则调用时需要两个头文件同事使用。 在mydll.h和mydll.cpp中可以正常编写代码&#xff…

这个sql有点东西,记录一下

我有一个需求:在订单表里面查询指定时间的订单数据,如果要是没有订单的话,需要展示当天日期和数据,数据为0 先看一下效果: 话不多说,直接上SQL SELECTdate_range.date AS 日期,COUNT( oco.id ) AS 总订单…

计算机网络——数据链路层-差错检测(奇偶校验、循环冗余校验CRC)

目录 奇偶校验 循环冗余校验CRC 发送方操作 接收方操作 生成多项式 举例-1 举例-2 我们知道, 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错;1可能变成0,而0也可能变成1,这称为比特差错。 如下…

浪潮信息 KeyarchOS 安全可信攻防体验

1. KeyarchOS——云峦操作系统简介 KeyarchOS 即云峦服务器操作系统(简称 KOS)是浪潮信息基于 Linux 内核、龙蜥等开源技术自主研发的一款服务器操作系统,支持 x86、ARM 等主流架构处理器,广泛兼容传统 CentOS 生态产品和创新技术产品,可为用…

c++--面向对象特性

1.面向对象指的是继承,封装,多态。 继承主要关注类的构造,赋值,析构。 以下对多态,封装进行补充说明。 2、多态 2.1.定义 a.赋值 派生类的指针,可以赋值给基类的指针。 派送类的对象,可以赋值给…

Avalonia中使用Prism实现区域导航功能

前言 上一篇文章我们讲了在Avalonia开发中,引入Prism框架来完成项目的MVVM迁移。本章内容将带领大家学习如何在Avalonia中使用Prism框架实现区域导航功能。如果你还不知道Avalonia中如何引入Prism框架,请看我上一篇文章:Avalonia框架下面使用…

【WPF.NET开发】构造动态布局

本文内容 系统必备创建项目配置默认的 Grid Panel 控件向面板中添加控件测试布局汇总所有内容后续步骤 在动态定位中,您通过指定子元素相对于父元素应该如何排列以及应该如何包装来排列子元素。 您还可以将窗口和控件设置为在其内容扩展时自动扩展。 适用于 Vis…

Oracle merge into语句(merge into Statement)

在Oracle中,常规的DML语句只能完成单一功能,,例如insert/delete/update只能三选一,而merge into语句可以同时对一张表进行更新/插入/删除。 目录 一、基本语法 二、用法示例 2.1 同时更新和插入 2.2 where子句 2.3 delete子句 2.4…

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的,它是数据库操作中的一种重要操作,能够帮助用户删除不需要的数据,以便保持数据库的整洁和高效。在使用Delete操作时,需要注意确保操作的准确性和安全性,以免误删重要…

[JavaScript前端开发及实例教程]计算器井字棋游戏的实现

计算器&#xff08;网页内实现效果&#xff09; HTML部分 <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>My Calculator&l…

Ruff智能物联网网关助力工厂数智化运营,实现产量提升5%

数字化转型是大势所趋&#xff0c;以工业互联网为代表的数实融合是发展数字经济的重要引擎&#xff0c;也是新质生产力的一大助力。工业互联网是新工业革命的重要基石&#xff0c;加快工业互联网规模化应用&#xff0c;是数字技术和实体经济深度融合的关键支撑&#xff0c;是新…

回归预测 | MATLAB实现CNN-BiLSTM(卷积双向长短期记忆神经网络

效果一览 基本介绍 提出一种同时考虑时间与空间因素的卷积&#xff0d;双向长短期记忆&#xff08; CNN-BiLSTM&#xff09;模型&#xff0c;将具有空间局部特征提取能力的卷积神经网络&#xff08;CNN&#xff09;和具有能同时考虑前后方向长时间信息的双向长短期记忆&#xf…

JavaScript基础知识21——for循环

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天学习for循环&#xff0c;以下为学习笔记。 1、while循环和for循环有啥不同&#xff1f; 1.1、在实际开发中&#xff0c;while循环用来解决循环次数不确定时使用&#xff0c;当一个循环不确定会循环多少次时&#…

【每日OJ —— 94. 二叉树的中序遍历】

每日OJ —— 94. 二叉树的中序遍历 1.题目&#xff1a;94. 二叉树的中序遍历2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;94. 二叉树的中序遍历 2.解法 2.1.算法讲解 1.首先如果在每次每个节点遍历的时候都去为数组开辟空间&#xff0c;这样的效率太低…

OWASP安全练习靶场juice shop-更新中

Juice Shop是用Node.js&#xff0c;Express和Angular编写的。这是第一个 完全用 JavaScript 编写的应用程序&#xff0c;列在 OWASP VWA 目录中。 该应用程序包含大量不同的黑客挑战 用户应该利用底层的困难 漏洞。黑客攻击进度在记分板上跟踪。 找到这个记分牌实际上是&#…

【PyTorch】tensorboardX的安装和使用

文章目录 1. tensorboardX的安装2. tensorboardX的使用 tensorboardX是一种能将训练过程可视化的工具 1. tensorboardX的安装 安装命令&#xff1a; pip install tensorboardXVSCode集成了TensorBoard支持&#xff0c;不过事先要安装torch-tb-profiler&#xff0c;安装命令&…

文件管理和操作工具Path Finder mac功能介绍

Path Finder mac是一款Mac平台上的文件管理和操作工具&#xff0c;提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件&#xff0c;以及进行各种高级操作。 Path Finder mac软件功能 - 文件浏览&#xff1a;可以快速浏览文…

如何购买华为云服务器

华为云是华为推出的云计算服务平台&#xff0c;旨在为企业和个人提供全面的云端解决方案。它提供了包括计算、存储、数据库、人工智能、大数据、安全等多种云服务&#xff0c;覆盖了基础设施、平台和软件级别的需求。华为云致力于构建安全可信赖的云计算基础设施&#xff0c;以…

vite初识

Vite是伴随着Vue3正式版一起发布的&#xff0c;最开始Vite 1.0的版本是为Vue3服务的&#xff0c;并不是跨框架的。之后半年时间左右&#xff0c;出现了Vite 2.0版本&#xff0c;Vite 2.0真正脱离了和Vue3的强关联&#xff0c;以插件的方式&#xff0c;可以集成到目前流行的主流…

【每日一题】到达首都的最少油耗

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心深搜 写在最后 Tag 【递归/深度优先搜索】【树】【2023-12-05】 题目来源 2477. 到达首都的最少油耗 题目解读 每个城市都有一位代表需要前往城市 0 进行开会。每个城市都有一辆座位数为 seats 的汽车&#xff0…