【STM32+HAL+Proteus】系列学习教程---中断(NVIC、EXTI、按键)

实现目标

1、掌握STM32的中断知识

2、学会STM32CubeMX软件关于中断的配置

3、具体目标:1、外部中断检测按键,每按一次计一次数,满5次LED1状态取反。


一、中断概述

1.1、中断定义

        CPU执行程序时,由于发生了某种随机的事件(包括外部或内部),让CPU暂时停下正在运行的程序,转而去执行一段处理事件的程序(中断服务子程序或中断处理程序),当这段程序执行完时(事件处理完时),程序又返回被停下的程序继续执行,这一过程称为中断。引发中断的称为中断源。中断可分为外部中断内部中断

        中断程序执行中又出现了中断,那么这种情况又叫做中断嵌套

1.2、中断的作用和意义

        中断的最终目的是高效处理紧急程序,并且不会占用CPU资源。还有就是能实现程序的并行化,实现嵌入式系统进程之间的切换等。

  • 实时控制:在确定的时间内对相应事件做出相应;例如:温度控制;
  • 故障处理:检测到故障,需要第一时间进行处理;
  • 数据传输:不确定数据何时会来,利用中断进行控制;

1.3、STM32的中断

        STM32F10x芯片有84个中断通道,包括16个内核中断68 个可屏蔽中断,这些中断通道已按照不同优先级顺序固定分配给相应的外部设备。

具体可参考:STM32F103的中文参考手册(9.1.2中断和异常向量)

二、 NVIC(中断向量控制器)

2.1 NVIC基本概念

        NVIC英文全称是Nested Vectored Interrupt Controller,中文意思就是嵌套向量中断控制器,通俗的讲它就是一个开关与选择器。它属于M3内核的一个外设,控制着芯片的中断相关功能。M3 内核都是支持 256 个中断,其中包含了 16 个系统中断 240 个外部中断,并且具有 256 级的可编程中断设置。

2.2、中断处理机制

工作过程:

         对于外部产生的中断不管是串口、定时器、IIC还是EXTI ,GPIO都由做NVIC来管理,NVIC的主要功能可以概括为:1. 中断管理;2.支持异常及中断向量化处理;3.支持嵌套中断。

2.3、STM32中断优先级

        当多个中断同时到来时,CPU该执行那个中断呢?这个时候就需要用到中断优先级,给中断的执行顺序排个序,优先级高的可以比优先级低的先执行,甚至优先级高的可以打断正在执行的优先级低的中断程序。

        STM32F103芯片支持60个可屏蔽中断通道,每个中断通道都具备自己的中断优先级控制字节(8位,但是STM32F103中只使用4位,高4位有效),用于表达优先级的高4位又可以组成抢占式优先级响应优先级,通常也把响应优先级称为“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。

NVIC_PriorityGroup

抢占优先级

取值范围

响应优先级

取值范围

描述

NVIC_PriorityGroup_0

0

015

抢占优先级占0位,

响应优先级占4

NVIC_PriorityGroup_1

01

07

抢占优先级占1位,

响应优先级占3

NVIC_PriorityGroup_2

0123

0123

抢占优先级占2位,

响应优先级占2

NVIC_PriorityGroup_3

01234567

01

抢占优先级占3位,

响应优先级占1

NVIC_PriorityGroup_4

015

0

抢占优先级占4位,

响应优先级占0

优先级判断原则:

       中断优先级的数值越小,优先级级别越高。先判断抢占优先级的大小,如果抢占优先级相同,则比较响应优先级的大小,若抢占优先级和响应优先级均相同,则根据中断向量表中的顺序来决定。

        假定现在有三个中断源:中断1中断2中断3。设置中断优先级分组为 2,然后设置中断1的抢占优先级为 2,响应优先级为 1。中断2的抢占优先级为 3,响应优先级为0。 中断3的抢占优先级为 2,响应优先级为 0。那么这 3 个中断的优先级顺序为: 中断 3>中断 1>中断 2。 上面例子中的中断 1 和中断 3 都可以打断中断 2 的中断。而中断 3 和中断 1却不可以相互打断!

三、EXTI(外部中断)

3.1EXTI的简介

        EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测下降沿检测。 EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

3.2EXTI功能框图

斜杠20,表示在控制器内部类似的信号线路有20个, EXTI总共有20个中断/事件线。

红色代表产生中断,绿色代表产生事件

产生中断线路目的是把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用, 并且是电路级别的信号传输,属于硬件级的。

3.3EXIT线与IO映射关系

        EXTI有20个中断/事件线,每个GPIO都可以被设置为输入线,占用EXTI0至EXTI15, 还有另外七根用于特定的外设事件,见表 EXTI中断_事件线 。

        EXTI0至EXTI15用于GPIO,通过编程控制可以实现任意一个GPIO作为EXTI的输入源。由表 EXTI中断_事件线 可知, EXTI0可以通过AFIO的外部中断配置寄存器1(AFIO_EXTICR1)的EXTI0[3:0]位选择配置为PA0、 PB0、PC0、PD0、PE0、PF0、PG0、PH0或者PI0 。

四、原理图设计

        按键默认接得有上拉电阻,未按下时单片机检测管脚为高电平,当按键按下,电平由高电平变为低电平。也就是一个下降沿信号

五、STM32CubeMX 配置

配置1:LED1/PB9设置为推挽输出;  K1设置为外部中断模式,NVIC组别默认,抢占优先级,响应优先级默认为0,使能外部中断。

配置2:外部中断设置为下降沿触发

六、程序设计

1、定义一个全局变量,用于统计按键按下次数

/* USER CODE BEGIN PV */

 int cnt = 0;//计数变量
 
/* USER CODE END PV */

2、中断回调函数对按键进行处理,次数到达5次,LED1状态取反。

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_11)  //按键K1按下
	{
	    cnt++;
		if(cnt == 5)//按键次数到5次
		{
			cnt = 0;
			HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); //LED1电平翻转
		}		
	}	
		
	__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_11);            //清除中断标志
}

/* USER CODE END 4 */

七、实验效果

八、仿真实现

按键按下5次后,LED1的状态取反,亮灭交替。


总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

巡检机器人有哪些功能和作用?

在科技如此发达的时代,巡检机器人犹如一位不知疲倦的守护者,悄然走进了我们的生活。它们具备着令人惊叹的功能和作用,成为了保障安全、提高效率的重要力量。那么,巡检机器人功能和作用?下面我们来说说旗晟机器人的几款…

faad2交叉编译——aac解码为pcm,解决faad单通道转双通道问题

FAAD是比较成熟高效的开源AAC解码库,这里用于解码AAC生成PCM数据,用于音频播放。这里因为faad库,会将单通道转化为双通道踩了些坑,所以记录一下。 我使用的是2.11.0版本,貌似往前的版本没有使用CMake,需要c…

自动化测试:Selenium入门指南!

Selenium是一个强大的自动化测试工具,特别适用于Web应用测试。本指南将介绍Selenium的安装、常用功能以及一些常见方法,帮助入门并能够更灵活地进行自动化测试。Selenium是一个用于自动化浏览器操作的工具,它广泛应用于Web应用程序的测试和网…

【前缀和】560. 和为 K 的子数组 974. 和可被 K 整除的子数组

题目链接 974. 和可被 K 整除的子数组 560. 和为 K 的子数组 今天刷题的时候,刷了这两题,感觉挺有意思的。代码写起来挺简单的,但是思路和其中的细节以及涉及到的知识点确实让我挺意外的。这里写个博客解析一波,也是巩固一下。 力…

分享《2024年中国企业级SaaS行业研究报告》

(文章作者与来源:艾瑞咨询) 大浪淘沙,SaaS行业进入关键转折点,企业级SaaS的总体市场规模达到888亿元,同比增长13.0%。内外部因素叠加之下,预计三年未来企业级SaaS市场规模的增速将稳定在15%-20…

请大数据把我推荐给正在申请小程序地理位置接口的人

小程序地理位置接口有什么功能? 若提审后被驳回,理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通,建议完成接口开通后或移除接口相关内容后再进行后续版本提审”,那么遇到这种情况&#x…

2024速通python之python基础

文章目录 一、你好,世界二、基本数据类型(1)数字型(2)字符串(3)列表(4)元组(5)集合(6)字典 二、注释(1&#x…

【面试干货】http请求报文的组成与作用?

【面试干货】http请求报文的组成与作用? 一、http 的请求报文组成二、请求行(Request Line)三、请求头部(Request Headers)四、请求体(Request Body)五、响应头部 (Response Headers…

LeetCode70:爬楼梯

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 解题思想 1.确定dp数组以及下标的含义 dp[i]: 爬到第i层楼梯,有dp[i]种方法 2.确定递推公式 从dp[i]的定义可以…

Ansible任务剧本Playbook之变量、模板、角色介绍

前言 上篇介绍了 Ansible 单模块(AD-Hoc)的相关内容Ansible自动化运维工具单模块介绍-CSDN博客,Ad-Hoc 命令是一次性的、即时执行的命令,用于在远程主机上执行特定任务,这些命令通常用于快速执行简单的任务。当需要在…

【AI绘画】Midjourney 工笔画 水蓝色衣服的少女

using Midjourney 提示词: highly detailed,细节刻画细腻,超高清晰度,32k,HD,大师作品,高质量,动漫少女,水墨人像,20岁年轻身材很好的中国少女,惊人的美貌,五官精致,精致的妆容,华丽的水蓝色衣服,古风服饰,华丽的珠宝,飞扬的黑色长发,大风吹起头发,宝石发光,黄金装饰…

如何给正弦信号添加12V直流偏置

一个有趣问题的探究: 运放在单电源的情况下只能输出正电压(单方向的),这就使得有正负值的信号电压只能输出一半: 【单电源供电的运放如何增加直流偏置】(电阻分压法): 单电源供电的…

某云eHR PtFjk.mob 任意文件上传漏洞复现

0x01 产品简介 某云eHR是大中型企业广泛采用人力资源管理系统。某云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 某云EHR系统PtFjk.mob接口处存在未授权文件上传漏洞,攻击者可上传webshell来命令执行,获取服务器权限。 0x03 复现环境 FOFA:bod…

算法-并查集

目录 什么是并查集 并查集基础 (1)原理 (2)初始化 (3)查询 (4)合并 (5)判断是否同一集合 并查集优化 路径压缩 启发式合并 并查集模板 模板 例题…

线下订单平台操作步揍

收款管理 1微信收款查询 1. 获取微信数据 获取微信数据。通过时间范围 查找微信数据调用第三方接口如下: Map map HttpPost.doPost("https://qyapi.weixin.qq.com/cgi-bin/externalpay/get_bill_list?access_token"ApiUtils.getWxtoken(),args); 其中…

如何缩小图片尺寸不改变清晰度?几个方法教你解决

在平时对图片进行处理的时候,最害怕的就是修改过的图片质量下降,导致清晰度不够,尤其是缩小图片尺寸的时候,所以今天小编就来告诉大家几个关于修改图片尺寸又不改变清晰度的方法。 修改图片大小是非常普遍的图片编辑需求&#xf…

【SpringMVC 】什么是SpringMVC(三)?基于springmvc的文件上传、基于springmvc的拦截器、基于springmvc的邮件发送

文章目录 SpringMVC第五章1、SpringMVC文件上传1、基本步骤1-2345-82、邮件发送1、基本步骤1-234-5567-8 简单邮件带附件的邮件第六章1、拦截器的使用使用步骤232、调度的使用基本步骤1-56-8调度规则3、shiro安全框架核心概念基本语法1、基于ini文件的认证**测视类**2、基于rea…

计算机组成原理网课笔记

无符号整数的表示与运算 带符号整数的表示与运算 原反补码的特性对比 移码

基于 docker-compose 部署 LNMP 架构

目录 前言 1、任务要求 2、Nginx 2.1 建立工作目录并上传相关安装包 2.2 编写 Nginx Dockerfile 脚本 2.3 准备 nginx.conf 配置文件 3、Mysql 3.1 建立工作目录并上传相关安装包 3.2 编写 Mysql Dockerfile 脚本 3.3 编写 my.cnf 配置文件 4、PHP 4.1 建立工作目录…