【【萌新的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.rhkb.cn/news/117358.html

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

相关文章

腾讯云网站备案详细流程_审核时间说明

腾讯云网站备案流程先填写基础信息、主体信息和网站信息,然后提交备案后等待腾讯云初审,初审通过后进行短信核验,最后等待各省管局审核,前面腾讯云初审时间1到2天左右,最长时间是等待管局审核时间,网站备案…

【易售小程序项目】修改“我的”界面前端实现;查看、重新编辑、下架自己发布的商品【后端基于若依管理系统开发】

文章目录 “我的”界面修改效果界面实现界面整体代码 查看已发布商品界面效果商品数据表后端上架、下架商品ControllerMapper 界面整体代码back方法 编辑商品、商品发布、保存草稿后端商品校验方法Controller 页面整体代码 “我的”界面修改 效果 界面实现 界面的实现使用了一…

DevOps理念:开发与运维的融合

在现代软件开发领域,DevOps 不仅仅是一个流行的词汇,更是一种文化、一种哲学和一种方法论。DevOps 的核心理念是通过开发和运维之间的紧密合作,实现快速交付、高质量和持续创新。本文将深入探讨 DevOps 文化的重要性、原则以及如何在团队中实…

Python入门教程 - 基本语法 (一)

目录 一、注释 二、Python的六种数据类型 三、字符串、数字 控制台输出练习 四、变量及基本运算 五、type()语句查看数据的类型 六、字符串的3种不同定义方式 七、数据类型之间的转换 八、标识符命名规则规范 九、算数运算符 十、赋值运算符 十一、字符串扩展 11.1…

Ubuntu20.04下安装搜狗输入法Linux版

Ubuntu20.04下安装搜狗输入法Linux版 参考搜狗输入法的官网安装指南; 第一步:打开搜狗输入法官网; https://shurufa.sogou.com/ 点击X86_64后将会自动跳转到搜狗输入法的安装指南中; 安装指南 Ubuntu搜狗输入法安装指南 搜狗…

iOS开发Swift-7-得分,问题序号,约束对象,提示框,类方法与静态方法-趣味问答App

1.根据用户回答计算得分 ViewController.swift: import UIKitclass ViewController: UIViewController {var questionIndex 0var score 0IBOutlet weak var questionLabel: UILabel!IBOutlet weak var scoreLabel: UILabel!override func viewDidLoad() {super.viewDidLoad()…

如何停止一个正在运行的线程

使用共享变量的方式 在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的线程用来作为是否中断的信号,通知中断线程的执行。 使用interrupt方法终止线程 如果一个线程由于等待某些事件的发生而被阻塞,又该怎样…

Vavido IP核Independent Clocks Block RAM FIFO简述

文章目录 1 FIFO(先入先出)1.1 概念1.2 应用场景1.3 FIFO信号1.4 FIFO读写时序1.4.1 FIFO读时序1.4.2 FIFO写时序 参考 1 FIFO(先入先出) 1.1 概念 FIFO(First in First out)即先入先出队列,是…

2023年高教社杯 国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…

2023应届生java面试紧张失误之一:CAS口误说成开心锁-笑坏面试官

源于:XX网,如果冒犯,表示歉意 面试官:什么是CAS 我:这个简单,开心锁 面试官:WTF? 我:一脸自信,对,就是这个 面试官:哈哈大笑&#xff…

React原理 - React New Component Lifecycle

目录 扩展学习资料 React New Component Lifecycle【新生命周期】 React 组件新生命周期详解 React组件老生命周期 v15.x 为什么Fiber Reconciler要有新的生命周期函数呢? 新的组件生命周期 getDerivedStateFromProps 挂载阶段 更新阶段 卸载阶段 异常捕…

基于grpc从零开始搭建一个准生产分布式应用(6) - 02 - MapStruct数据转换

一、基础转换 1.1、基础类型 基本类型、包装类、BigDecimal转String默认使用DecimalFormat格式化,Mapping#numberFormat可以指定格式,Date转String默认使用SimpleDateFormat格式化,如默认格式不符要求,可以用,Mapping…

53 个 CSS 特效 3(完)

53 个 CSS 特效 3(完) 前两篇地址: 53 个 CSS 特效 153 个 CSS 特效 2 这里是第 33 到 53 个,很多内容都挺重复的,所以这里解释没之前的细,如果漏了一些之前的笔记会补一下,写过的就会跳过。…

Error: PostCSS plugin autoprefixer requires PostCSS 8 问题解决办法

报错:Error: PostCSS plugin autoprefixer requires PostCSS 8 原因:autoprefixer版本过高 解决方案: 降低autoprefixer版本 执行:npm i postcss-loader autoprefixer8.0.0

【配置环境】Visual Studio 配置 OpenCV

目录 一,环境 二,下载和配置 OpenCV 三,创建一个 Visual Studio 项目 四,配置 Visual Studio 项目 五,编写并编译 OpenCV 程序 六,解决CMake编译OpenCV报的错误 一,环境 Windows 11 家庭中…

Super Resolve Dynamic Scene from Continuous Spike Streams论文笔记

摘要 近期,脉冲相机在记录高动态场景中展示了其优越的潜力。不像传统相机将一个曝光时间内的视觉信息进行压缩成像,脉冲相机连续地输出二的脉冲流来记录动态场景,因此拥有极高的时间分辨率。而现有的脉冲相机重建方法主要集中在重建和脉冲相…

C语言入门 Day_12 一维数组0

目录 前言 1.创建一维数组 2.使用一维数组 3.易错点 4.思维导图 前言 存储一个数据的时候我们可以使用变量, 比如这里我们定义一个记录语文考试分数的变量chinese_score,并给它赋值一个浮点数(float)。 float chinese_scoe…

解决WebSocket通信:前端拿不到最后一条数据的问题

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

CTFhub-SSRF-内网访问

CTFHub 环境实例 | 提示信息 http://challenge-8bf41c5c86a8c5f4.sandbox.ctfhub.com:10800/?url_ 根据提示,在url 后门添加 127.0.0.1/flag.php http://challenge-8bf41c5c86a8c5f4.sandbox.ctfhub.com:10800/?url127.0.0.1/flag.php ctfhub{a6bb51530c8f6be0…

自动化运维:Ansible之playbook基于ROLES部署LNMP平台

目录 一、理论 1.playbook剧本 2.ROLES角色 3.关系 4.Roles模块搭建LNMP架构 二、实验 1.Roles模块搭建LNMP架构 三、问题 1.剧本启动php报错语法问题 2.剧本启动mysql报错语法问题 3.剧本启动nginx开启失败 4.剧本安装php失败 5.使用yum时报错 6.rpm -Uvh https…