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可以用作普通IOBKP_TamperPinCmd(DISABLE);  //关闭入侵检测功能,PC13可以用作普通IOGPIO_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可以用作普通IOBKP_TamperPinCmd(DISABLE);  //关闭入侵检测功能,PC13可以用作普通IOGPIO_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);

学习笔记,仅供参考。

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

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

相关文章

思腾云计算中心 | 5千平米超大空间,基础设施完善,提供裸金属GPU算力租赁业务

2021年,思腾合力全资收购包头市易慧信息科技有限公司,正式开启云计算业务。思腾云计算中心占地2400平米,位于包头市稀土高新区,毗邻多家知名企业,地理位置优越,交通便利,是区内重要的信息化产业…

配置集群免密登录

文章目录 前言配置集群免密登录1. 设置主机名与 IP 地址的映射关系2. 生成 SSH 密钥对3. 将公钥复制到集群节点4. 测试免密登录5. 配置节点之间互相免密登录 总结 前言 本文介绍了如何配置集群之间免密登录,以便在搭建集群环境时方便地进行节点之间的通信。通过设置…

【开源】基于Vue.js的公司货物订单管理系统

文末获取源码,项目编号: S 082 。 \color{red}{文末获取源码,项目编号:S082。} 文末获取源码,项目编号:S082。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供…

19、pytest通过mark标记测试函数

官方实例 [pytest] markers slow:marks tests as slow(deselect with -m "not slow")serial# content of test_mark.py import pytestpytest.mark.slow def test_mark_function():print("test_mark_function was invoked")assert 0解读与实操 通过使用p…

FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!

随着移动互联网时代的发展,各大手机厂商为打造生态系统、构建自身的技术壁垒,纷纷投身自研操作系统。 而对于一款游戏安全产品,在不同操作系统下,是否能够无缝兼容并且提供稳定的、高强度的加密保护,成了行业的一大痛…

7、信息收集(2)

文章目录 一、目录扫描1.1 目录扫描的原因1.2 目录扫描方法 二、指纹识别2.1 系统指纹识别2.2 中间件指纹识别2.3 web程序指纹识别2.4 防火墙指纹识别2.5 其他工具使用 三、Google Hacking3.1 逻辑运算符3.2 基本语法3.3 相关案例 一、目录扫描 1.1 目录扫描的原因 寻找网站后…

docker中mysql的数据迁移

在Docker中进行MySQL数据迁移通常涉及将数据从一个MySQL容器导出&#xff0c;并将其导入到另一个容器或主机上的MySQL实例中。以下是一般步骤&#xff1a; 步骤 1: 在源 MySQL 容器中导出数据 进入源 MySQL 容器&#xff1a; docker exec -it <source_mysql_container_name…

翻译: 大语言模型LLMs能做什么和不能做什么 保存笔记What LLMs can and cannot do

生成式 AI 是一项惊人的技术&#xff0c;但它并非万能。在这个视频中&#xff0c;我们将仔细看看大型语言模型&#xff08;LLM&#xff09;能做什么&#xff0c;不能做什么。我们将从我发现的一个有用的心理模型开始&#xff0c;了解它能做什么&#xff0c;然后一起看看 LLM 的…

怎么验证公钥和私钥是一对

文章目录 前言ssh-keygen 和 openssl两种证书的内容对比 从私钥提取公钥OPENSSH和PEM两种密钥格式相互转化OpenSSH 格式私钥转换成 OpenSSL PEM 格式私钥OpenSSL PEM 格式私钥转换成 OpenSSH 格式私钥OpenSSH 格式公钥生成 OpenSSL PEM 格式公钥OpenSSL PEM 格式公钥生成 OpenS…

【Azure 架构师学习笔记】- Azure Databricks (2) -集群

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建 前言 在上文中提到了ADB 的其中一个核心就是集群&#xff0c;所以这里专门研究一下ADB 的集群。 ADB 集群 首先了解一下ADB…

《SpringBoot项目实战》第六篇—接口防抖(防重复提交)的一些方式

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 第六篇—接口防抖(防重复提交)的一些方式 本文参考项目源码地址&#xff1a;summo-springboot-i…

SpringBoot基础知识

SpringBoot简介 回顾什么是Spring Spring是一个开源框架&#xff0c;2003 年兴起的一个轻量级的Java 开发框架&#xff0c;作者&#xff1a;Rod Johnson 。 Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是如何简化Java开发的 为了降低Ja…

记录:Unity脚本的编写9.0

目录 射线一些准备工作编写代码 突然发现好像没有写过关于射线的内容&#xff0c;我就说怎么总感觉好像少了什么东西&#xff08;心虚 那就在这里写一下关于射线的内容吧&#xff0c;将在这里实现射线检测鼠标点击的功能 射线 射线是一种在Unity中检测碰撞器或触发器的方法&am…

22、pytest多个参数化的组合

官方实例 # content of test_multi_parametrie.py import pytestpytest.mark.parametrize("x",[0,1]) pytest.mark.parametrize("y",[2,3]) def test_foo(x,y):print("{}-{}".format(x,y))pass解读与实操 要获得多个参数化参数的所有组合&…

什么是HTTP/2?它与HTTP/1.x相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL

《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL 前言简介相关知识Stochastic Gradient Variational BayesMultivariate Gaussian DistributionIsotropic Gaussian DistributionReparameterization Trickprior network & posterior network …

简述Blender

前言 Blender是一款免费开源的3D计算机图形软件&#xff0c;功能强大&#xff0c;包括建模、动画、渲染、视频剪辑等多个方面。下面我分别为你介绍Blender的基础、提升、优势和应用领域。 介绍 Blender是由Blender基金会开发的开源项目&#xff0c;最初设计为一个内部工具&a…

C++ 函数详解

目录 函数概述 函数的分类 函数的参数 函数的调用 函数的嵌套调用 函数的链式访问 函数声明和定义 函数递归 函数概述 函数——具有某种功能的代码块。 一个程序中我们经常会用到某种功能&#xff0c;如两数相加&#xff0c;如果每次都在需要用到时实现&#xff0c;那…

第4章 互联网

文章目录 4.1 计算机网络基础 94 4.1.1 计算机网络的基本概念 94 4.1.2 局域网的基本原理 96 4.1.3 局域网协议与应用 98 4.2 Internet 100 4.2.1 TCP/IP 101 4.2.2 TCP/IP应用 106 4.2.3 网络操作系统的功能 112 4.2.4 网络安全的概念 116 4.3 计算机软件编程基础 …

唯创知音WTR096A-16S语音芯片:引领喊话器声音还原新时代

随着科技的不断发展&#xff0c;声音在各种场景中扮演着至关重要的角色。在喊话器领域&#xff0c;唯创知音的WTR096A-16S语音芯片以其卓越的性能和声音还原度的提高&#xff0c;为喊话器应用带来了全新的体验。 1. 声音还原度的升级 WTR096A-16S语音芯片采用16位数模转换器&…