STM32单片机(五)第一节:EXTI外部中断

news2024/11/15 9:10:08

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习STM32的中断系统和外部中断,包含两部分,第一小节主要学习中断系统的基础知识,第二小节是写两个程序进行练习,即对射式红外传感器计次和旋转编码器计次,最终附上所有的源代码;
本小节主要是学习STM32的中断系统的基础知识。

文章目录

  • 一、中断基础知识
  • 1.1 中断系统的概念
    • 1.2 中断执行流程
    • 1.3 STM32中断
    • 1.4 NVIC基本结构
    • 1.5 NVIC优先级分组
  • 二、EXTI外部中断
    • 2.1 EXTI简介
    • 2.2 EXTI基本结构
    • 2.3 AFIO
    • 2.4 EXTI框图

一、中断基础知识

1.1 中断系统的概念

在这里插入图片描述

  • 中断触发条件有很多,比如对于外部中断来说,可以是引脚发生了电平跳变;对于定时器来说,可以是定时的时间到了;对于串口通信来说,可以是接收到了数据;
  • 中断优先级是为了在多个中断同时申请时,判断一下,应该先处理哪个,如果事件非常紧急,我们就可以将中断优先级设置高一下;当然如果不是很紧急,那么就可以将优先级设置低一些;这样可以更好地安排这些中断事件,防止紧急的事件被别的中断耽误;
  • 把中断程序再次中断的现象,就叫中断嵌套;中断嵌套也是为了照顾非常紧急的中断的;

1.2 中断执行流程

在这里插入图片描述

  • 左边第一个图表示中断打断主程序;当中断来了后,主程序立即暂停,程序由硬件电路自动跳转到中断程序中,当中断程序执行完之后,程序再返回被暂停的地方继续运行;被暂停的地方,我们就称它为“断点”;
  • 中间的图是中断嵌套的执行流程;
  • 右边的图是中断的C语言程序示例。

1.3 STM32中断

在这里插入图片描述

  • 第一条是,68个可屏蔽中断通道,这个中断通道就是中断源的意思;68个中断源,这是是F1系列最多的中断数量;
  • NVIC就是STM32中用来管理中断,分配优先级的;NVIC的中断优先级总共有16个等级;

在这里插入图片描述
除去灰色部分,剩下的就是STM32外设的中断了;

1.4 NVIC基本结构

在这里插入图片描述

NVIC的名字叫做嵌套中断向量控制器;在STM32中,它是用来统一分配中断优先级和管理中断的;
在这里插入图片描述
上图中的n表示有n条线,因为一个外设可能会同时占用多个中断通道;

NVIC输出只有一个中断,NVIC要做的就是对输入的多个中断进行管理,一次只输出一个优先级最高的中断交给CPU处理。

举个例子,NVIC就相当于医院的叫号系统,当然CPU就是主治医师了。

1.5 NVIC优先级分组

在这里插入图片描述
为了处理不同形式的优先级,STM32的NVIC可以对优先级进行分组,分为抢占优先级和响应优先级。

响应优先级可以优先排队,只要优先级够高,可以插队在其他低优先级中断的前面,待CPU处理完当前的中断后优先执行。

抢占优先级可以优先执行,只要优先级够高,则可以打断现在正在处理的中断;一个很鲜明的例子就是中断嵌套;中断嵌套就是很明显的抢占优先级的实例。

二、EXTI外部中断

2.1 EXTI简介

在这里插入图片描述

  • 相同的Pin不能同时触发中断,比如PA0和PB0就不能同时用;或者PA1、PB1、PC1这样的,端口GPIO_Pin一样的,则不能同时用; PA6和PA7、或者PA9和PB19、PB0和PB1,这样的都可以。

2.2 EXTI基本结构

在这里插入图片描述

2.3 AFIO

AFIO是中断引脚选择器;
在这里插入图片描述

上图中的梯形,表示数据选择器;是STM32里很常用的标志。

2.4 EXTI框图

在这里插入图片描述

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

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

相关文章

AST反混淆js代码——猿人学竞赛第二题

猿人学JS比赛第二题解混淆 分析代码解混淆代码结果 前一段时间参加猿人学js比赛,今天把第二题的还原做一下笔记。 分析代码 首先,我们需要对混淆js代码进行分析,确定还原的思路,才能书写解混淆代码进行还原。代码是静态的&#x…

KYOCERA Programming Contest 2023(AtCoder Beginner Contest 305)(A、B、C、D)[施工中]

文章目录 A - Water Station(模拟)B - ABCDEFG(模拟)C - Snuke the Cookie Picker(模拟、暴力)D - Sleep Log(二分,前缀) A - Water Station(模拟) 题意:在[0,100]所有 x % 5 0的地方设置一个水站&#x…

由源码生成Python可调用的dll

1. 不带参数的函数与调用 blog.csdn.net/qq 40833391/article/details/128000638python编程(python调用dll程序)_python 调用dll_嵌入式-老费的博客-CSDN博客思路很简单,只需要在Visual Studio中设置输出类型即可 1.1. 创建项目 首先创建一…

【HashMap集合】存储学生对象并遍历

HashMap集合存储学生对象并遍历 1.键是String,值是Student 需求:创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历 思路: 定义学生类 创建HashMap集合对象 创建…

uni.navigateBack()返回上一页携带参数的实现

a页面跳转b页面,再b页面点击确定返回到a页面刷新列表 //b页面confirm(){let pages getCurrentPages();//当前页面let prevPage pages[pages.length - 2];//上一个页面prevPage.setData({//直接给上一个页面赋值isRefresh: true})uni.navigateBack();} 返回到a页面…

适用于 Linux 的 Windows 子系统wsl文档

参考链接:https://learn.microsoft.com/zh-cn/windows/wsl/ 鸟哥的Linux私房菜:http://cn.linux.vbird.org/ http://cn.linux.vbird.org/linux_basic/linux_basic.php http://cn.linux.vbird.org/linux_server/ 目录 安装列出可用的 Linux 发行版列出已…

【Protobuf】Map类型的使用

文章目录 2.4 map 类型一、 基本认识二、map相关函数4.3 contact2.4的改写 2.4 map 类型 本系列文章将通过对通讯录项目的不断完善,带大家由浅入深的学习Protobuf的使用。这是Contacts的2.4版本,在这篇文章中将带大家学习Protobuf的 map 语法&#xff0c…

STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)

STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE) 文章目录 STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)模拟I2C读写的实现mpu6050_iic.cmpu6050_iic.h代码分析 复位,读取温度,角度等函数封装mpu6050.cmpu…

HTTPS 原理浅析及其在 Android 中的使用

1.HTTP协议的不足 HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,存在的问题如下: 通信使用明文(不加密),内容可能会被窃听;不验证通信方的身份,有可能遭…

Hbase-- 03

4.原理加强 4.1数据存储 4.1.1行式存储 传统的行式数据库将一个个完整的数据行存储在数据页中 4.1.2列式存储 列式数据库是将同一个数据列的各个值存放在一起 传统行式数据库的特性如下: ①数据是按行存储的。 ②没有索引的查询使用大量I/O。比如一般的数据库表…

vue3 element-plus后台管理系统实现登录与记住密码功能

一、效果 二、代码部分 1、勾选记住密码布局代码 2、判断是否勾选,勾选则保存账号密码,否则不保存账号密码,由于是demo,故并没有做加密,如果是生成最好是对密码做加密处理。 3、页面挂载的时候需要背叛的是否保存密码,…

JDK8 ConcurrentHashMap 怎么放弃 Lock 使用 synchronized 了

synchronized 之前一直都是重量级锁,但是 JDK6 中官方是对他进行过升级,引入了偏向锁,轻量级锁,重量级锁,现在采用的是锁升级的方式去做的。针对synchronized 获取锁的方式,JVM 使用了锁升级的优化方式&…

十行代码,就能真正让你理解DMA(CPU的秘书)

下面的代码是单片机串口发送数据的程序. char a0xAA;//定义变量a,值为0xAA; TXREG a;//把数据由内存转移到串口外设;那我们定义的变量a的值存储在哪里了呢?可以看下单片机的逻辑框图。 变量其实都是存在一个叫SRAM的存储器中,它…

Playwright 和 Selenium 的区别是什么?

前言 最近有不少同学问到 Playwright 和 Selenium 的区别是什么?有同学可能之前学过 selenium 了,再学一个 playwright 感觉有些多余,可能之前有项目已经是 selenium 写的了,换成 playwright 需要时间成本,并且可能有…

【支付系统】核心支付流程

支付在产品中常见的用处为购买和充值.这两种功能操作大相径庭,其中购买相对充值多了很多步骤,它需要锁商品或者库存,还需要超时未支付取消订单等操作.在这篇文章中主要探讨支付部分,属于购买和充值公共部分. 下面是绘制的简易支付时序图 以上时序图并非完整,其实核心步骤就是, …

商城购买会员打折满减优惠券商品

文章目录 前言一、代码结构二、UML图三、代码实现3.1.domain3.2.enums3.3.strategy3.4.service3.5.config 四、单元测试五、模式应用六、问题及优化思路6.1.问题6.2.优化 总结 前言 使用策略模式、工厂方法模式、单例模式实现一些购买策略,需求:商城商品…

服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】

完整源码资料 地址直达:http://t.csdn.cn/RWsGw 前言 这是大二时候写的第一个Java项目,框架基本上都没有用到、而且用到的技术很老很老。只简单使用了一个Mybatis简化数据库的操作。前端框架用的还是Layui,贼难用。闲的无聊,对这…

缺少成本票怎么解决?首选自然人代开,方便又快捷!

《税筹顾问》专注于园区招商,您的贴身节税小能手,合理合规节税! 成本票缺失导致的严重结果就是,缺少成本入账,导致利润虚高,企业所得税变高了,那么现有的解决方式很多,只是一些方法过…

图形学实验(完整文件见上传)

CRect rect; this->GetClientRect(rect); pDC->Ellipse(rect); // DDALineView.cpp : implementation of the CDDALineView class // #include “stdafx.h” #include “DDALine.h” #include “DDALineDoc.h” #include “DDALineView.h” #ifdef _DEBUG #define new…

Qt扫盲-QEvent 理论总结

QEvent 理论总结 一、概述二、事件类型1. Qt 已定义类型2. 开放用户定义类型 三、注册事件 一、概述 Qt的主事件循环(QCoreApplication::exec())从事件队列中获取原生窗口系统事件,将它们转换为QEvents,并将转换后的事件发送给QObjects。 一般来说&…