【【萌新的STM32学习-18 中断的基本概念3】】

news2024/9/24 15:17:12

萌新的STM32学习-18 中断的基本概念3

EXTI和IO映射的关系
AFIO简介(F1)
Alternate Function IO 复用功能IO 主要用于重映射和外部中断映射配置
1.调试IO配置
来自AFIO_MAPR[26:24] , 配置JTAG/SWD的开关状态 (这个我们并不用太过深刻的关注)
2.重映射配置
AFIO_MAPR , 部分外设IO重映射配置
(这也不算是本节课的重点 自行去查阅)
3. 外部中断配置
AFIO_EXTICR1~4 配置EXTI中断线0~15对应到哪个具体的IO口
特别注意: 配置AFIO寄存器之前要使能AFIO时钟
__HAL_RCC_AFIO_CLK_ENABLE(); 对应RCC_APB2ENR寄存器 位0

EXTI0与引脚号为0 相对应
比如他控制着一整组的PA0 PB0 PC0 PD0 直到PK0 等等

AFIO_EXTICR1 的 EXTI0[3:0] 位正好是4位控制着 (F1)
AFIO 所做的工作就是告诉我们EXTI究竟会和GPIO的哪一个端口对应

外部中断配置寄存器1 AFIO_EXTICR1
这个寄存器的高16位保留
低十六位分割为每四位一组
那么一个AFIO_EXTICR1 就可以控制4条EXTI线
这样的AFIO一共有4个 那么一共能够控制实现16个这样的地址线

我们是这样来说明的EXTIx[3:0] 举个例子在配置EXTI3上  那就是指用以选择EXTI3外部中断的输入源 
0000   PA[3]引脚
0001   PB[3] 引脚
0010   PC[3] 引脚
0011   PD[3] 引脚
0110   PG[3] 引脚

如何使用中断
GPIO外部中断
设置输入模式 :  GPIO
上拉 下拉 浮空 
经过GPIO 来到AFIO 用来设置 EXTI和IO的映射关系

接下来就来到了EXTI
EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/中断请求的边沿检测器组成。每一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。
在这里插入图片描述
再接下来来到了NVIC就是中断管家
在这里插入图片描述
NVIC可以设置中断分组,优先级,使能

GPIO外部中断对应着EXTI0-EXTI 15 一共16根线 
那么剩下的EXTI16 17等等 它会从其他外设进入EXTI 
在这里插入图片描述
既然信号是外部进来的,那么首先遇到的外设肯定是GPIO (上拉 下拉 浮空输入) 接下来会来到 AFIO(F1) 然后到EXTI (外部中断事件控制器, 屏蔽 上升沿 下降沿) 然后传入了 NVIC (中断总管家 管理了使能 优先级控制) 最后传入进CPU 去处理中断
EXTI 即是外部中断和事件控制器,它是由 20 个产生事件/中断请求的边沿检测器组成。每一条输入线都可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输入线都可以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
STM32 EXTI 的配置步骤
1.使能GPIO时钟  (目的是使能GPIO时钟)
2.设置GPIO输入模式 (设置上拉,下拉,浮空)
AFIO就是设置IO与EXTI映射关系
3.使能AFIO/SYSCFG时钟
(设置AFIO的时钟开启寄存器)
4. 设置EXTI和IO对应关系
(选择PA~PK到底哪组IO对应EXTI输入先,AFIO)
5.设置EXTI屏蔽,上/下沿
(设置EXTI对应通道的屏蔽和上升沿/下降沿触发)
6.设置NVIC
(分3步,设置优先级分组,设置优先级,使能中断)

7.设置中断服务函数
(编写对应中断的中断服务函数!清中断标志!)
因为我们现在用的是HAL库
所以的2到5步可以通过HAL_GPIO_Init一步到位

下面是STM32 EXTI的HAL库设置步骤(GPIO外部中断)
就是把上面的2-5步合成用HAL库的形式
1.使能GPIO时钟
(使用__HAL_RCC_GPIOx_CLK_ENABLE)
2.GPIO/AFIO/EXTI
(使用HAL_GPIO_Init,一步到位)
3.设置中断分组
(使用HAL_NVIC_SetPriorityGrouping 此函数仅需设置一次即可)
4.设置中断优先级
(使用HAL_NVIC_SetPriority)
5.使能中断
(使用HAL_NVIC_EnableIRQ)
6.设计中断服务函数
(编写:EXTIx_IRQHandler,中断服务函数,清中断标志)
说起GPIO那么我们会想到适用于EXTI0到15
那么是否这些都有Handler
其实我们说并没有
STM32平台仅有EXTI0-4 各有一个
EXTI5 6 7 8 9 共用一个
EXTI10 11 12 13 14 15共用一个
总共有7个外部中断服务函数

通用外设驱动模型(四步法)
1.初始化 : 时钟设置,参数设置,IO设置,中断设置(开中断,设NVIC)
2.读函数(可选)
(从外设读取数据)
3.写函数 (可选)
(往外设写入数据)
4.中断服务函数 (可选)
(根据中断标志,处理外设各种终端事务)

HAL库中断回调处理机制介绍
凡是用到中断 都会有一个中断服务函数
在.s文件里面 也叫硬件中断服务函数
(在处理中断程序之后会有一个清标志这是正常的)
但是在我们的HAL库里是怎么操作的 调用一个HAL库中断处理公用函数 (这里的作用是异常处理,清中断标志,调各种回调函数)
下一步到了HAL库数据处理回调函数
(包括多个各种的回调函数)

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

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

相关文章

使用实体解析和图形神经网络进行欺诈检测

图形神经网络的表示形式(作者使用必应图像创建器生成的图像) 一、说明 对于金融、电子商务和其他相关行业来说,在线欺诈是一个日益严重的问题。为了应对这种威胁,组织使用基于机器学习和行为分析的欺诈检测机制。这些技术能够实时…

【C++11新特性】可变参数模板

文章目录 1. 认识可变参数模板2. 可变参数模板的定义方式3. 参数包的展开方式3.1 递归展开参数包3.2 逗号表达式展开参数包 1. 认识可变参数模板 可变参数模板是C11新增的最强大的特性之一,它对参数高度泛化,能够让我们创建可以接收可变参数的函数模板和…

【SpringBoot学习笔记02】静态资源

Spring Boot 通过 MVC 的自动配置类 WebMvcAutoConfiguration 为这些 WebJars 前端资源提供了默认映射规则,部分源码如下。 jar包: JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的…

springboot整合rabbitmq死信队列

springboot整合rabbitmq死信队列 什么是死信 说道死信,可能大部分观众大姥爷会有懵逼的想法,什么是死信?死信队列,俗称DLX,翻译过来的名称为Dead Letter Exchange 死信交换机。当消息限定时间内未被消费,…

编码过程中需要注意哪些安全问题?

SQL 安全 注入式(Inject)攻击是一类非常常见的攻击方式,其基本特征是程序允许攻击者将不可信的动态内容注入到程序中,并将其执行,这就可能完全改变最初预计的执行过程,产生恶意效果。下面是几种主要的注入…

为 Python 创建别名

有时您有自己喜欢的 Python 版本,并且不想在新版本到来时放弃它。 您的旧脚本可能无法在新版本的 Python 上运行,或者旧版本上的项目太多,将它们迁移到新版本是一场马拉松。 在这种情况下,您决定保留两个版本的 Python。 在本文中…

什么是算法?

目录 算法是指解决方案的准确而完整的描述。 1.算法的基本特征 所谓算法,是一组严谨地定义运算顺序的规则 并且每一个规则都是有效的,且是明确的 此顺序将在有限的次数下终止 什么是算法? 算法的4个基本特征 算法的6个基本方法 选择算…

浏览器输入一个URL之后发生了什么?

URL解析DNS解析TCP连接TSL连接HTTP请求TCP挥手接收并解析响应 URL 解析 主要分为: 协议,eg http,https域名或者ip地址,eg www.baidu.com 域名相对于ip地址来说,更方便人们记忆,但是实际的网络传输中使用的是ip地址 端…

Java“牵手”天猫商品快递费用API接口数据,天猫API接口申请指南

天猫平台商品快递费用接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取天猫商品的标题、价格、库存、商品快递费用,宝贝ID,发货地,区域ID,快递费用,月销量、总销量、库存、详情…

十几款拿来就能用的炫酷表白代码

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 表白代码 1、坐我女朋友好吗,不同意就关机.vbs2、坐我女朋友好吗&…

订单状态定时处理、来单提醒和客户催单

一、Spring Task 1.1 基本介绍 1.2 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间 构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义 每个域的含义分别为:秒、分钟、小时、日…

C++|观察者模式

观察者模式: 定义对象间的一种一对多(变化)的依赖关系,以便当一个 对象(Subject)的状态发生改变时,所有依赖于它的对象都 得到通知并自动更新 动机: 在软件构建过程中,我们需要为某些对象建立…

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看?(一)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

基于吉萨金字塔建造算法优化的BP神经网络(预测应用) - 附代码

基于吉萨金字塔建造算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于吉萨金字塔建造算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.吉萨金字塔建造优化BP神经网络2.1 BP神经网络参数设置2.2 吉萨金字塔建造算法应用…

SpringBoot与前端交互遇到的一些问题

一、XXX.jar中没有主清单属性 场景: SpringBoot打的jar包在Linux运行报错 解决方案: 百度找了很多都是一样的答案,但是解决不了我的问题,于是我新建了一个springboot项目发现打的jar包可以在Linux上运行。检查了下只要把下面这2个…

R语言之缺失值处理

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 R语言 也可获取。 文章目录 缺失值处理1. 识别缺失值2. 探索数据框里的缺失值3. 填充缺失值3.1 删除缺失值:na.omit( )、complete.cases( …

机器学习:异常检测实战

文章目录 Anomaly Detection目录任务介绍数据集方法评估Baseline报告报告评价标准 Anomaly Detection 目录 任务介绍 无监督的异常检测 数据集 方法 autoencode 是否能够还原出原始类型图片,基于重构loss来判断是否正常 重构误差当作异常分数 评估 采用ROC和AUC…

Kubernetes入门 十、HPA 自动扩/缩容

目录 概述安装metrics-server使用HPA 概述 我们已经可以通过手动执行 kubectl scale 命令实现Pod的扩缩容,但是这显然不符合 Kubernetes 的定位目标–自动化和智能化。Kubernetes 期望可以通过监测Pod的使用情况,实现 Pod 数量的自动调整,于…

Orange Pi 3B 开发板 开箱评测 和 系统安装教程

香橙派 Orange Pi 3B(RK3566)开发板 开箱测评 和 系统烧录教程 简介 香橙派 Orange Pi 3B 是一款树莓派大小的单板计算机,但接口更加齐全,包括一个全尺寸 HDMI 接口和一个 M.2 存储插槽,售价199起。 Orange Pi 3B 采…

【Tkinter系列02/5】界面初步和布局

本文是系列文章第二部分。前文见:【Tkinter系列01/5】界面初步和布局_无水先生的博客-CSDN博客 说明 一般来说,界面开发中,如果不是大型的软件,就不必用QT之类的实现,用Tkinter已经足够,然而即便是Tkinter规…