STM32的外部中断详解

news2024/9/21 8:01:22

一、什么是中断?

想象一下你正在家里做饭,突然门铃响了,你听到门铃声后,会暂时放下手中的事情(比如炒菜),去开门看看是谁。在这个例子中,门铃声就是一个“中断”,它打断了你原本在做的事情(炒菜)。

在STM32(一个常用的微控制器)中,中断也是类似的概念。STM32有很多功能,比如控制LED灯、读取传感器数据、与电脑通信等。当STM32正在执行某个任务时,如果外部发生了某个事件(比如一个按钮被按下、一个传感器值发生了变化),这个事件就会产生一个“中断信号”,告诉STM32:“嘿,有事情发生了,你需要停下来看看!”

STM32在接收到中断信号后,会暂时放下当前的任务(就像你放下炒菜的铲子去开门一样),然后跳转到专门处理这个中断的程序(我们称之为“中断服务程序”)去执行。在这个中断服务程序中,STM32会处理这个中断事件,比如读取按钮的状态、处理传感器的数据等。处理完中断事件后,STM32会返回到之前被打断的任务中,继续执行。

STM32支持多种类型的中断,比如外部IO中断(比如按钮被按下)、定时器中断(比如每隔一段时间就触发一次)、串口通信中断(比如接收到电脑发来的数据)等。每种中断都可以设置不同的优先级,这样当多个中断同时发生时,STM32会先处理优先级高的中断

二、外部中断

了解了什么是中断以后,我们来介绍一下STM32的外部中断,此处以STM32F429为例,它拥有22个外部中断,每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。这22个中断分别为:

EXTI 线 0~15:对应外部 IO 口的输入中断。
EXTI 线 16:连接到 PVD 输出。
EXTI 线 17:连接到 RTC 闹钟事件。
EXTI 线 18:连接到 USB OTG FS 唤醒事件。
EXTI 线 19:连接到以太网唤醒事件。
EXTI 线 20:连接到 USB OTG HS(在 FS 中配置)唤醒事件。
EXTI 线 21:连接到 RTC 入侵和时间戳事件。
EXTI 线 22:连接到 RTC 唤醒事件。

从上面看到EXTI线0-15对应了外部的IO口中断,但是那么多的IO口,是如何对应这16个EXTI线的呢?

STM32是这么设计的,PA0,PB0,PC0...PI0(也就是所有的GPIO0),对应了EXTI0。然后PA1,PB1,PC1...PI1(所有的GPIO1),对应了EXTI1。这样依次类推,一直到EXTI15。中断可以监控GPIO的上升沿或者下降沿并跳转到我们写的对应的函数,注意的是:一个EXTI线中断只能给一个引脚使用,比如给PA0加了外部中断以后,就不能再给PB0加外部中断了

三、代码实现

比如这里我们给GPIO_PE3加一个上升沿触发的中断。

1.使能GPIO

	GPIO_InitTypeDef GPIO_Initure;
	
	
	__HAL_RCC_GPIOE_CLK_ENABLE();			//使能GPIOE时钟

    //PE3 输入
	GPIO_Initure.Pin=GPIO_PIN_3;            //PE3
	GPIO_Initure.Mode=GPIO_MODE_IT_RISING;     //上升沿触发
	GPIO_Initure.Pull=GPIO_NOPULL;        //上拉
	GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
	HAL_GPIO_Init(GPIOE,&GPIO_Initure);
		
	//给PE3加上升沿中断
	HAL_NVIC_SetPriority(EXTI3_IRQn,4,2);       //抢占优先级为4,子优先级为2
	HAL_NVIC_EnableIRQ(EXTI3_IRQn);             //使能中断线3

2.中断函数

void EXTI3_IRQHandler(void)
{
		if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_3) != RESET)
  {
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_3);
		Gather_FLAG=1;
  }
}

这段代码里面,如果进了中断,先清除外部中断位,然后改变了一个全局变量的标识符,我们可以通过标识符的改变在其它运行的代码中继续我们耗时的工作,切忌不要在中断里面进行耗时工作

注意,在编写中断服务程序时,一定要确保在中断处理完成后清除相应的中断标志位,否则中断可能会持续触发,导致程序无法正常工作。

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

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

相关文章

uniapp文件查找失败:‘./pages/classify/classify/classify.vue‘at main.is:6

在HBuilderX这类前端开发环境中,当使用其项目结构管理功能(如新建页面或目录)时,工具通常会自动在项目的配置文件(如pages.json)中注册或更新相应的路径信息,以确保应用能够正确地加载和显示这些…

谢希仁计算机网络第八版期末复习简答(3)

传输层 TCP与UDP的区别 区别 TCP UDP 是否连接 面向连接(三握四挥) 无连接 是否可靠 可靠 不可靠传输,不使用流量控制以及拥塞控制 连接对象 只能是一对一 无限制 传输方法 面向字节流 面向报文 首部开销 最小20字节最大60字…

Renesas R7FA8D1BH (Cortex®-M85) 输入接口的应用

Renesas R7FA8D1BH (Cortex-M85) 控制DS18B20和ADC,实现两个页面的跳转功能 目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置 2.1 硬件接口电路 2.2 FSB配置KEY的IO 3 功能实现 3.1 FSP生成项目 3.2 KEY功能实现…

macOS Ventura 13.6.8 (22G820) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.6.8 (22G820) 正式版发布,ISO、IPSW、PKG 下载 2024 年 7 月 30 日凌晨,macOS Sonoma 14.6 发布,本更新提供了重要的错误修复和安全更新,建议所有用户安装。同时带来了 macOS Ventura 13.6.8 和 macOS Monterey…

java-questions-分析

系列文章目录 文章目录 目录 系列文章目录 文章目录 前言 一、问题案例 1、maven项目compile时候出现告警warn 2、java文件打包然后在命令行中运行java会找不到主类 3、程序找不到数据库驱动和配置实例 4、springboot和mybatis-plus版本不兼容导致 5、springboot项目启动的解释…

中国最受欢迎的起名大师颜廷利:飞蛾投火,拥抱光明

标题:飞蛾投火,拥抱光明;视死如归,石破天惊…(升命学说) 在深邃的夜幕下,一只飞蛾振翅向着熊熊燃烧的火焰。它的行为,似乎暗合了一种前沿而深邃的哲学——升命学说。祖籍齐鲁大地山东济南的当代文化名人,颜廷利教授的这一学说不仅描绘了生命的不屈与顽强,更映射出生命体对于光…

云借阅图书管理系统——用户登录模块

一、用户登录 (一)用户登录流程图 从图中可以看出,用户登录过程中首先要验证用户名和密码是否正确,如果正确,可以成功登录系统,系统会自动跳转到主页;如果错误,则在登录页面给出错误…

浅谈电商数据采集重要的一环:数据清洗

在电子商务的浩瀚数据海洋中,数据采集是获取商业洞察力的第一步,而数据清洗则是这一过程中不可或缺且至关重要的环节。数据清洗不仅关乎数据的准确性与可靠性,更直接影响到后续数据分析的质量与深度。本文将从技术角度出发,深入探…

Mirror学习笔记(二) 传输协议

文章目录 一、KCP传输协议二、Telepathy 传输协议三、WebSockets传输协议四、多路复用传输:五、延迟模拟传输:六、Ignorance协议七、LiteNetLib协议八、FizzSteamworks协议九、FizzyFacepunch协议十、加密协议十一、Edgegap协议 一、KCP传输协议 KCP是M…

脊髓小伙伴的饮食秘籍来啦!吃出满满活力,康复路上不孤单

Hey小伙伴们~👋 是不是有时候觉得,面对美食却有点无从下手,心里那个小小的声音在说:“我该怎么做,才能让身体更喜欢我呢?”别担心,今天就来给你种草一份超级实用的脊髓损伤患者饮食改善攻略&…

天地图电子地图矢量地图底图结合图像学实现风格底图地图

一、基础概念 天地图(TianDiTu),全称为“国家地理信息公共服务平台”,是中国国家测绘地理信息局主导建设的国家级地理信息服务平台。它提供了一系列的地图服务和地理信息数据,包括基础地理信息、专题地理信息、地…

个人健康数据管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,知识科普管理,健康信息共享管理,健康计划管理,健康数据管理,数据分析管理,系统管理 微信端账号功能包括:系…

【Qt】多线程示例代码(QThread)

从QThread继承方式 1. qdicethread.h #ifndef QDICETHREAD_H #define QDICETHREAD_H#include <QObject> #include <QThread>class QDiceThread : public QThread {Q_OBJECT public:explicit QDiceThread(QThread *parent nullptr);void diceBegin();void dicePau…

公交信息在线查询小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;线路信息管理&#xff0c;站点分类管理&#xff0c;站点信息管理&#xff0c;周边分类管理周边信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0…

数说故事 | 大数据洞察宠物消费市场数据

“班味”越来越重的年轻人正靠养宠物来“拯救”自己的生活。结束了一天的忙碌&#xff0c;推开家门&#xff0c;撸个猫、遛个狗&#xff0c;哪怕云吸一下&#xff0c;命就续上了&#xff0c;感觉瞬间焕发新生&#xff0c;能量值满满。 宠物对于铲屎官的意义&#xff0c;不止于…

软件统一过程(RUP)

软件统一过程(Rational Unifed Process&#xff0c;RUP)是 Rational 软件公司创造的软件工程方法。RUP 描述了如何有效地利用商业的、可靠的方法开发和部署软件&#xff0c;是一种重量级过程。 1. 统一过程概述 统一过程 统一过程&#xff08;RUP/UP&#xff0c;Rational Unif…

openEuler Repo

openEuler repo 前言 一键创建在线repo&#xff0c;脚本自动识辨系统无须更改&#xff0c;默认脚本走的是华为更改变量即可$repo_url即可。 openEuler Repo 一键更改脚本 兼容一键替换openEuler repo 20 21 22 23 24自动识辨清华大学 openEuler repo华为云源 openEuler repo…

2024.7.31(基于域名和IP地址的主机,上线商城)

将原有的nginx.conf文件备份 [roottomcat ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak [roottomcat ~]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf > /usr/local/nginx/conf/nginx.conf 一、基于域名的虚拟主机 创建…

C语言程序设计18

程序设计18 问题18_1代码18_1结果18_1 问题18_2代码18_2结果18_2 问题18_3代码18_3结果18_3 问题18_1 函数 f u n fun fun 的功能是&#xff1a;有 N N N\times N NN 的矩阵&#xff0c;根据给定的 m ( m < N ) m(m<N) m(m<N) 值&#xff0c;将每行元素中的值均右…

Spring Boot 使用 Spring AI 构建知识库服务

目录 前言 环境准备 JDK17 Spring Boot 3.2.4 Ollama PostgreSQL16 下载向量化模型 pom yml EmbeddingController 向量化示例 向量化文本 向量化检索 ChatController 知识库示例 前言 做 AI 大模型技术调研时&#xff0c;参考的开源项目 Maxkb&#xff0c;它基于…