STM32基础篇:EXTI × 事件 × EXTI标准库

EXTI

EXTI简介

EXTI:译作外部中断/事件控制器,STM32的众多片上外设之一,能够检测外部输入信号的边沿变化并由此产生中断

例如,在检测按键时,按键按下时会使电平产生翻转,因此可以使用EXTI来读取按下时的边沿变化,从而给NVIC输出一个中断触发信号,通过中断响应函数实现想要的功能。


EXTI内部结构

当外部输入信号输入时,首先会经过一个叫边沿检测的模块,它有两路输出信号,分别是上升沿信号和下降沿信号。当外部输入信号发生一个上升沿时,边沿检测模块会在上升沿信号路输出一个脉冲信号(下降沿正好相反)。这两路输出信号再经过一个或门,形成双边沿信号路,即无论上升沿还是下降沿都会此路产生脉冲信号

通过数据选择器(复用器),从上述的三路里选择一路,连接到输出(例如,选择上升沿信号路,相当与选择了上升沿进行触发,意思是只有当输入信号发生上升沿时,会触发中断)。数据选择器就是用来选择中断触发的边沿

再往右走,有一个或门,一端连接了外部输入信号变化所触发的脉冲信号,另一端连接到了软件触发。(即:我们既可以通过外部输入信号的边沿变化去触发一个中断,也可以通过软件编程直接去触发中断

再往右还有中断屏蔽事件屏蔽,最后是中断挂起(其实就是挂起寄存器的一个比特位),当中断挂起收到脉冲信号后,其值由0变1,但是它不能完成自动清零,我们必须手动向这个寄存器写0。

因为挂起寄存器直接与NVIC相连接 ,若不置零,则NVIC输入端一直有中断触发信号,中断响应函数就会一直被循环执行。


EXTI通道

有时为了检测多个信号,将上图所示结构复制很多份,在EXTI里有20份这样的结构(即:EXTI0~EXTI19,且20份合起来才是一个完整的片上外设)。

作用:

1、让所有IO具有触发中断的能力

每个普通IO引脚都可以被设置为中断/事件的输入线,占用EXTI0~EXTI15共16个通道。但需要注意的是,对于数字编号相同的引脚来说,不能同时触发中断(例如我使用了PA0,就不能同时使用PB0、PC0等)。

注意,EXTI5~EXTI9、EXTI10~EXTI15这两组通道的输出端连接在或门上。

2、其他功能

如下所示,用于特定的外设事件的EXTI16~EXTI19:


EXTI寄存器组

对于EXTI模块,其寄存器组如下(6个):

每一个寄存器有20个比特位,对应了EXTI的20个通道。


上升/下降沿选择寄存器

通过这两个寄存器来配置外部输入信号的触发方式(即:上升沿、下降沿或双边沿触发),相当于控制了复用器。

以TR0为例,当上升/下降沿选择触发器TR0分别为1、0时,为上升沿触发;分别为0、1时,为下降沿触发;均为1时,为双边沿触发。


其他寄存器

软件触发寄存器 :将对应比特位置1,软件触发的位置就会发出一个脉冲。

中断屏蔽寄存器:向其比特位写0,中断就被屏蔽;写1,中断就会被挂起;

挂起寄存器:通常写这个寄存器,将其主动清零。

事件屏蔽寄存器:负则事件屏蔽的开关,方法与中断屏蔽寄存器一样。


事件

指突发事件本身,一般是一个脉冲信号,事件的处理过程不需要CPU介入(例如片上外设A产生了一个事件,那么它可以直接调用片上外设B去处理事件)。


EXTI标准库编程

在文件夹std_periph_driver里面存储着标准库的源码,其中stm32f10x_exti.h和stm32f10x_exti.c两个文件组成了EXTI的驱动。

EXTI_Init

用于初始化EXTI的某个通道。

void EXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);

此函数的参数为结构体变量,初始化之前需要自己对其赋值,具体赋值的内容如下 :

需要注意,EXTI也不需要开启时钟,虽然EXTI是片上外设,但它与芯片唤醒有关,比较特殊,其时钟默认开启,且不可关闭。


附其他函数:

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

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

相关文章

Kotlin Misk Web框架

Kotlin Misk Web框架 1 Misk 框架介绍2 Misk/SpringBoot 框架对比3 Misk 添加依赖/配置3.1 build.gradle.kts3.2 settings.gradle.kts3.3 gradle.properties 4 Misk 请求接口5 Misk 程序模块6 Misk 主服务类7 Misk 测试结果 1 Misk 框架介绍 Misk 是由 Square 公司开发的一个开…

Python:while循环

while循环体 while 条件: 符合条件执行语句 .... 执行完后需执行的语句 # while循环 i1 while i<5:print(i)ii1 print("Done") test. 做一颗圣诞树吧 答案&#xff1a; # while循环 i 1 j5 while i < 5:print( * j* * i)i i 2jj-1 print("Done"…

【Python百日进阶-Web开发-音频】Day702 - librosa安装及模块一览表

文章目录 一、Librosa简介与安装1.1 Librosa是什么1.2 Librosa官网 二、Librosa安装2.1 安装Librosa 三、安装ffmpeg3.1 ffmpeg官网下载3.2 ffmpeg安装3.2.1 解压3.2.2 添加环境变量3.2.3 测试ffmpeg是否安装成功 四、Librosa 库模块一览4.1 库函数结构4.2 Audio processing&am…

Redis-linux下安装redis7配置

Redis安装配置 Redis安装配置一、Linux环境安装Redis必须先具备gcc编译环境1.什么是gcc 二、版本选择三、Redis7安装步骤1.下载2./opt目录下解压redis3.执行make命令4.查看默认安装目录:usr/local/bin5.初始化设置redis.conf6.启动服务7.连接服务8.关闭服务9.卸载redis Redis安…

方便好用的C#.Net万能工具库Masuit.Tools

文章目录 简介开发环境安装使用特色功能示例代码1. 检验字符串是否是Email、手机号、URL、IP地址、身份证号等2.硬件监测(需要管理员权限&#xff0c;仅支持Windows&#xff0c;部分函数仅支持物理机模式)3.html的防XSS处理&#xff1a;4.整理Windows系统的内存&#xff1a;5.任…

施耐德EOCR系列电机保护器全面升级后無端子型

一、施耐德数码型产品升级背景 施耐德电气作为一家全球领先的能源管理和自动化解决方案提供商&#xff0c;其产品线包括各种电动机保护器等数码型产品。随着技术的不断发展和市场需求的变化&#xff0c;施耐德会对其产品进行定期升级和优化。在升级过程中&#xff0c;产品的设…

前后端通信 —— HTTP/HTTPS

目录 一、HTTP/HTTPS 简介 1、HTTP 2、HTTPS 二、HTTP 工作过程 三、HTTP 消息 1、HTTP消息结构 2、HTTP消息示例 四、HTTP 方法&#xff08;常用&#xff09; 1、GET 2、POST 3、PUT 4、DELETE 5、GET与POST对比 五、HTTP 状态码&#xff08;常用&#xff09; …

Linux多线程编程-生产者与消费者模型详解与实现(C语言)

1.什么是生成者与消费者模型 生产者-消费者模型是并发编程中的经典问题&#xff0c;描述了多个线程&#xff08;或进程&#xff09;如何安全、有效地共享有限的缓冲区资源。在这个模型中&#xff0c;有两种角色&#xff1a; 生产者&#xff08;Producer&#xff09;&#xff1…

牛客周赛 Round 51 解题报告 | 珂学家

前言 题解 典题场&#xff0c; EF都有很多种解法 A. 小红的同余 性质: 相邻两数互质 x ( m 1 ) / 2 x (m1)/2 x(m1)/2 m int(input())print ((m 1) // 2)B. 小红的三倍数 性质: 各个位数之和是3的倍数&#xff0c;可被3整除 和数的组合顺序无关 n int(input()) arr…

Mysql数据表的约束(下)

3.默认值约束(default) 与非空约束的命令一致,因为都属于列级约束,因此只需将not null改为default 默认值即可 删除默认值约束: 4.主键约束(primary key) 表示给一张表格设置了一个唯一标识,为了更快的去通过唯一的数据去准确的查找到每一条记录,一半咱们在创建表…

Netgear WN604 downloadFile.php 信息泄露漏洞复现(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR(网件)公司生产的无线接入器(或无线路由器)提供Wi-Fi保护协议(WPA2-PSK, WPA-PSK),以及有线等效加密(WEP)64位、128位和152位支持,保障网络安全。同时支持MAC地址认证、802.1x RADIUS以及EAP TLS、TTLS、PEAP等安全机制,…

昇思25天学习打卡营第15天|基于MobileNetv2的垃圾分类

一、关于MobileNetv2 MobileNet网络专注于移动端、嵌入式或IoT设备的轻量级CNN网络。MobileNet网络使用深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;的思想在准确率小幅度降低的前提下&#xff0c;大大减小了模型参数与运算量。并引入宽度系数 α和…

Paddle 打包部署

PaddleOCR 打包部署exe 心酸历程 PaddleOCR部署exe模式PaddleOCR安装到本地(稍后有时间再写)PaddleOCR打包过程异常问题记录&#xff01;&#xff01;&#xff01;&#xff01;No such file or directory: D:\\py_project\\paddleOCR\\dist\\paddleOCR\\_internal\\paddleocr\\…

如何指定多块GPU卡进行训练-数据并行

训练代码&#xff1a; train.py import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset import torch.nn.functional as F# 假设我们有一个简单的文本数据集 class TextDataset(Dataset):def __init__(self, te…

Linux系统密码重置

实验环境&#xff1a; Centos 7.9 背景&#xff1a; 找回root用户密码 1、首先&#xff0c;启动Linux系统进入开机界面&#xff0c;在界面中快速点击‘e’进入编辑界面&#xff0c;如图&#xff1a; 2、进入编辑界面会后往下翻找到“Linux16”内容所在的行数&#xff0c;在&q…

景联文科技打造千万级高质量中文数字专利数据库,赋能知识产权领域AI创新

专利大模型是在专利数据分析、检索、理解和生成等领域运用的大规模机器学习模型。 已被应用在多个场景中&#xff0c;包括但不限于专利检索优化、专利文本的自动化撰写、专利价值评估、技术趋势预测、专利侵权检测、以及专利组合管理和战略规划等。 专利大模型依赖于海量的数字…

python--实验 11 模块

目录 知识点 模块基础 模块使用方式 自定义模块示例 模块的有条件执行 Python包结构 定义和导入包 常用第三方库及安装 实例代码 第三方库自动安装脚本 Python标准库介绍 PyInstaller 小结 实验 1.(基础题)制作文本进度条。 2.(基础题) 蒙特卡罗方法计算圆周率…

数据结构(单链表(1))

前言 线性表中有着许多的结构&#xff0c;如顺序表和链表。而单链表则是链表的最基础的一种形式&#xff0c;下面就让我们对其做一个了解。 概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次…

【python】OpenCV—European Article Number

参考学习来自&#xff1a;OpenCV基础&#xff08;25&#xff09;条码和二维码扫的生成与识别 1 条形码介绍 EAN-13是欧洲物品编码&#xff08;European Article Number&#xff09;的缩写&#xff0c;是一种广泛使用的条形码标准&#xff0c;特别是在超级市场和其它零售业中。…

1.33、激活可视化卷积神经网络(matalb)

1、激活可视化卷积神经网络原理及流程 激活可视化&#xff08;Activation Visualization&#xff09;指的是通过可视化神经网络中激活函数的输出&#xff0c;来理解神经网络是如何学习并提取特征的过程。在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;我们可以通过…