【【萌新的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.mzph.cn/news/55559.shtml

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

相关文章

Flutter 状态管理引子

1、为了更好地了解状态管理,先看看什么是状态。 在类似Flutter这样的响应式编程框架中,我们可以认为U相关的开发就是对数据进行封装,将之转换为具体的U1布局或者组件。借用Flutter官网的一张图,可以把我们在第二部分做的所有开发…

Go并发可视化解释 - Select语句

昨天,我发布了一篇文章,用可视化的方式解释了Golang中通道(Channel)的工作原理。如果你对通道的理解仍然存在困难,最好呢请在阅读本文之前先查看那篇文章。作为一个快速的复习:Partier、Candier 和 Stringe…

启动metastore服务报错

启动Metastore的时候报错: 简略的报错信息: MetaException(message:Error creating transactional connection factory)Caused by: MetaException(message:Error creating transactional connection factory)Caused by: javax.jdo.JDOFatalInternalExce…

使用VisualStudio制作上位机(五)

文章目录 使用VisualStudio制作上位机(五)第四部分:GUI界面数据显示使用VisualStudio制作上位机(五) Author:YAL 第四部分:GUI界面数据显示 这一部分,主要实现GUI的界面显示。 上一文已经实现了CAN数据的接收,并将数据更新到数组里。所以在做界面的显示时,只需要在…

C#设计模式六大原则之--接口隔离原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#)…

软考高级系统架构设计师系列论文真题一:论软件系统架构风格:真题分析、理论素材、精品范文赏析

软考高级系统架构设计师系列论文真题一:论软件系统架构风格:真题分析、理论素材、精品范文赏析 一、论软件系统架构风格二、论文解题思路1.找准核心论点2.理论素材准备三、精品范文赏析1.摘要2.正文3.总结一、论软件系统架构风格 系统架构风格是描述某一特定应用领域中系统组…

数据结构(Java实现)-ArrayList与顺序表

什么是List List是一个接口,继承自Collection。 List的使用 List是个接口,并不能直接用来实例化。 如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。 线性表 线性表(lin…

【LeetCode】392. 判断子序列 - 双指针

这里写自定义目录标题 2023-8-24 18:53:25 392. 判断子序列 2023-8-24 18:53:25 class Solution {public boolean isSubsequence(String s, String t) {int sIndex 0;// 遍历原始字符串for (int i 0; i < t.length(); i) {// 子字符串的下标 已经等于 子字符串的长度// …

0821|C++day1 初步认识C++

一、思维导图 二、知识点回顾 【1】QT软件的使用 1&#xff09;创建文件 创建文件时&#xff0c;文件的路径一定是全英文 2&#xff09;修改编码 工具--->选项--->行为--->默认编码&#xff1a;system 【2】C和C的区别 C又叫C plus plus&#xff0c;C是对C的扩充&…

Ubuntu18.04 交叉编译curl-7.61.0

下载 官方网址是&#xff1a;curl 安装依赖库 如果需要curl支持https协议&#xff0c;需要先交叉编译 openssl,编译流程如下&#xff1a; Ubuntu18.04 交叉编译openssl-1.1.1_我是谁&#xff1f;&#xff1f;的博客-CSDN博客 解压 # 解压&#xff1a; $tar -xzvf curl-7.61.…

机器学习——KNN算法

1、&#xff1a;前提知识 KNN算法是机器学习算法中用于分类或者回归的算法&#xff0c;KNN全称为K nearest neighbour&#xff08;又称为K-近邻算法&#xff09; 原理&#xff1a;K-近邻算法采用测量不同特征值之间的距离的方法进行分类。 优点&#xff1a;精度高 缺点&…

【Eclipse】汉化简体中文教程(官方汉化包,IDE自带软件安装功能),图文详情

目录 0.环境 1.步骤 1&#xff09;查看eclipse的版本 2&#xff09;在官网找语言包&#xff0c;并复制链接 3&#xff09;将链接复制到eclipse中 4&#xff09;汉化完成 0.环境 windows11&#xff0c;64位&#xff1b; eclipse 2021-6版本 1.步骤 思路&#xff1a;在官网找…

LabVIEW利用线性压缩弹簧开发重量测量系统

LabVIEW利用线性压缩弹簧开发重量测量系统 柔性传感器的曲率半径相对于指定重量的变化特性可用作力测量方法。在许多应用中&#xff0c;例如&#xff1a;汽车和工业控制&#xff0c;计算机外围设备&#xff0c;操纵杆和测量设备&#xff0c;带有压缩弹簧和柔性传感器的重量测量…

python中以 _ _ 开头的属性 和方法

在Python中&#xff0c;以下划线 (_) 开头的属性和方法通常被视为内部使用或私有的。而以双下划线 (__&#xff09;开头并且不以双下划线结尾的属性和方法叫做“名称修饰&#xff08;name mangling&#xff09;”。 以单下划线 (_) 开头的属性和方法&#xff1a; 这种命名约定暗…

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

文章目录 1 准备工作1.1 下载源码1.2 测试集下载2 配置环境3 dtu数据集 重建演示3.1 重建效果查看4 补充解释4.1 bash 脚本文件超参数解释4.2 lists/dtu解释5 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗…

咸鱼之王俱乐部网站开发

我的俱乐部 最新兑换码 *注意区分大小写&#xff0c;中间不能有空格&#xff01; APP666 HAPPY666 QQ888 QQXY888 vip666 VIP666 XY888 app666 bdvip666 douyin666 douyin777 douyin888 happy666 huhushengwei888 taptap666 周活动 宝箱周 宝箱说明 1.木质宝箱开启1个…

电容器件选型与应用案例

关注参数&#xff08;1&#xff09;容量和误差 实际电容量和标称电容量允许的最大偏差范围。在选型上注意精度等级&#xff0c;用字母表示&#xff1a;D—0.5%、F—1%、G—2%、J—5%、K—10%、M—20% &#xff08;2&#xff09;额定工作电压 电容器在电路中能够长期稳定、可靠工…

lintcode 1132 · 合法的三角数【中等】

题目链接&#xff0c;描述 https://www.lintcode.com/problem/1132 给定一个包含非负整数的数组&#xff0c;你的任务是计算从数组中选出的可以制作三角形的三元组数目&#xff0c;如果我们把它们作为三角形的边长。给定数组的长度不会超过 1000. 给定数组内的整数在 [0, 100…

2023SpringMvc和spring之八股文——面试题

概述 什么是Spring MVC&#xff1f;简单介绍下你对Spring MVC的理解&#xff1f; Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级 Web框架&#xff0c;通过把模型-视图-控制器分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的 web应用分成逻辑…

【C++入门到精通】C++入门 —— deque(STL)

阅读导航 前言一、deque简介1. 概念2. 特点 二、deque使用1. 基本操作&#xff08;增、删、查、改&#xff09;2. 底层结构 三、deque的缺陷四、 为什么选择deque作为stack和queue的底层默认容器总结温馨提示 前言 文章绑定了VS平台下std::deque的源码&#xff0c;大家可以下载…