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

萌新的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.hqwc.cn/news/89722.html

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

相关文章

Fedora Linux 的家族(一):官方版本

导读本文将对 Fedora Linux 官方版本进行更详细的介绍。共有五个 版本: Fedora Workstation、Fedora Server、Fedora IoT、Fedora CoreOS 和 Fedora Silverblue。Fedora Linux 下载页面目前显示其中三个为 官方 版本,另外两个为 新兴 版本。本文将涵盖所…

使用Python和systemctl管理Linux系统服务的简便工具

前言 本文介绍了一个实用工具,用于在Linux系统上管理systemctl服务。该工具提供了创建、安装、卸载、启动和停止服务的功能,帮助用户轻松地管理和控制正在运行的服务。 通过使用该代码,你可以轻松地执行以下操作: 创建服务文件&…

Matlab图像处理-加法运算

加法运算 图像加法运算的一个应用是将一幅图像的内容叠加到另一幅图像上,生成叠加图像效果,或给图像中每个像素叠加常数改变图像的亮度。 在MATLAB图像处理工具箱中提供的函数imadd()可实现两幅图像的相加或者一幅图像和常量的相加。 程序代码 I1 i…

2023高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…

对 K8s Pod 安全有多少认识?

写在前面 简单整理,博文内容涉及: PSP 的由来PSA 的发展PSA 使用认知 不涉及使用,用于了解 Pod 安全 API 资源理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全…

如何基于CEETRON ENVISON快速打造桌面、Web端仿真后处理系统?

数十年来,计算机数字模拟技术在物理、化学、工程等领域取得巨大进展。但实现完整的数字孪生 以模拟现实,仍需应对高维度、高精度建模的挑战以及计算机算力需求指数的增长。那该如何解决 这些更复杂的问题?采用具有高性能算力的云端资源进行…

2023年最新版Windows环境下|Java8(jdk1.8)安装教程

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 jdk1.8的下载和使用总共分为3个步骤: jdk1.8的下载、jdk1.8的安装、配置环境变量。 目录 一、jdk1.8下载…

忘记密码-小米机型 其他安卓机型账号锁 设备锁的分析与刷写某第三方解锁包输入“注册码”

重要提示: 博文的主要目的是分析安卓机型账号锁的安全性和解决方法。操作仅限于自己的机型忘记密码 手机号不用过了保修期导致无法通过官方解锁的操作,请勿用于非法途径 在开始前。对于锁的认知可以参考这篇博文 安卓搞机玩机-什么是“锁 ” BL锁 屏幕锁…

高性能网络模式-Reactor

事实上,Reactor 模式也叫Dispatcher模式,即I/O 多路复⽤监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程/线程。Reactor 模式也是一种非阻塞同步网络模式。 Reactor 模式主要由 Reactor部分和处…

LeetCode 面试题 02.04. 分割链表

文章目录 一、题目二、C# 题解 一、题目 给你一个链表的头节点 head 和一个特定值 x,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 点击此处跳转题目。 示例 1&#…

Linux下的系统编程——vim/gcc编辑(二)

前言: 在Linux操作系统之中有很多使用的工具,我们可以用vim来进行程序的编写,然后用gcc来生成可执行文件,最终运行程序。下面就让我们一起了解一下vim和gcc吧 目录 一、vim编辑 1.vim的三种工作模式 2.基本操作之跳转字符 &a…

无涯教程-Android - 环境设置

您可以从Oracle的Java网站下载最新版本的Java JDK-Java SE下载,您将在下载的文件中找到有关安装JDK的说明,按照给定的说明安装和配置安装程序。最后,将PATH和JAVA_HOME环境变量设置为引用包含 java 和 javac 的目录,通常分别是java_install_dir/bin和java_install_d…