零基础STM32单片机编程入门(三)中断详解及按键中断实战含源码视频

文章目录

    • 一.概要
    • 二.可嵌套的向量中断控制器 (NVIC)
    • 三.中断向量表
    • 四.中断优先级详解
    • 五.STM32外部中断控制器(EXTI)
      • 1.EXTI简介
      • 2.EXTI在中断向量表的位置
      • 3.EXTI外部中断产生的信号流向
      • 4.EXTI中断产生后的中断服务程序
    • 六.CubeMX配置一个GPIO输入中断的例程
    • 七.CubeMX工程源代码下载
    • 八.讲解视频链接地址
    • 九.小结

一.概要

中断是指单片机正在处理某个事件A,发生了另一件事件B,请求单片机迅速去处理(中断发生),单片机暂时停止当前的工作(中断响应),转去处理事件B(中断服务),待单片机处理事件B完成后,再回到原来的事件A(断点)继续执行,这一过程称之为中断。
STM32单片机的中断系统支持多种中断类型,包括内部中断和外部中断。内部中断通常由处理器内部的事件引发,如定时器溢出、除零错误等,而外部中断则由外部硬件或设备触发的事件引发,如按键按下、传感器触发等。

二.可嵌套的向量中断控制器 (NVIC)

CortexM3当中有一个强大而方便的NVIC即嵌套向量中断控制器(Nested Vectored Interrupt Controller),它是属于Cortex内核的器件,中断向量表中60个中断都由它来处理。NVIC是Cortex-M3核心的一部分,Cortex-M3的向量中断统一由NVIC管理。

NVIC的核心功能是中断优先级分组、中断优先级的配置、读中断请求标志、清除中断请求标志、使能中断、清除中断等,它控制着STM32中断向量表中中断号为0-59的60个中断!!外部中断信号从核外发出,信号最终要传递到NVIC(嵌套向量中断控制器)。NVIC跟内核紧密耦合,它控制着整个芯片中断的相关功能。

三.中断向量表

在中断向量表里给我们列出了各种外部中断, 前一张图黑色的是内核的中断,后一张图是外设相关的外部中断
在这里插入图片描述
在这里插入图片描述

四.中断优先级详解

中断优先级分为抢占优先级和子优先级两部分,用于确定中断的响应顺序和执行顺序。抢占优先级用于确定中断的响应优先级,而子优先级用于确定中断的实际执行优先级。当多个中断同时触发时,系统会优先处理抢占优先级较高的中断,而在相同抢占优先级的情况下,会根据子优先级来确定中断的执行顺序
在这里插入图片描述
在这里插入图片描述

五.STM32外部中断控制器(EXTI)

1.EXTI简介

STM32单片机的外部中断/事件控制器(External Interrupt/Event Controller,简称EXTI),使得微控制器能够高效地响应外部事件并执行相应的任务,EXTI允许STM32微控制器对外部事件进行监测和响应,这些事件可以是来自GPIO引脚的电平变化信号。当外部事件发生时,EXTI能够立即唤醒微控制器,并执行预定义的中断服务程序(ISR)或者事件处理函数,我们接下去对EXTI外部中断进行详细介绍。

2.EXTI在中断向量表的位置

GPIO口外部中断在中断向量表中分配了16个中断向量(EXTI0~EXTI4)
在这里插入图片描述
EXTI5~EXTI9
在这里插入图片描述
EXTI10~EXTI15
在这里插入图片描述
GPIO对应的外部中断,例如PA0,PB0,PC0对应的中断服务程序都是EXTI0_IRQHandler,一般只选其中一个引脚就可以。
在这里插入图片描述

3.EXTI外部中断产生的信号流向

如下图编号1~4是外部中断的信号流向

1.编号1是GPIO的任意一个引脚,就是高低电平信号输入脚
2.编号2是一个边沿检测电路,通过上升/下降沿触发选择器寄存器,对GPIO输入信号开启边沿信号检测,检测到了就在后面的编号3或门处给个1,而两个寄存器可以配置上升沿/下降沿,或者上升沿和下降沿都触发
3.编号3是一个或门电路,软件中断事件寄存器由软件置位 1,这一操作会把请求挂起寄存器的相应位置1
4.编号4是一个与门电路,中断屏蔽寄存器设置为1表示开放中断,编号 4 电路输出的信号会被保存到挂起寄存器(EXTI_PR)内,如果确定编号 4 电路输出为 1 就会把EXTI_PR(挂起寄存器) 对应位置 1,在该位中写入’1’可以清除它,也可以通过改变边沿检测的极性清除
5.编号4出来的信号发送到内核NVIC中请求产生中断,并跳转到中断服务函数

在这里插入图片描述

4.EXTI中断产生后的中断服务程序

中断向量表中的中断服务函数就是下面几个,中断产生后就会跳入相应函数,我们应用程序就可以对中断后需要做的事进行修改。
在这里插入图片描述

我们应用过程中一般在 stm32f1xx_it.c中对中断服务函数进行应用修改就可以

/**
  * @brief This function handles EXTI line0 interrupt.
  */
void EXTI0_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI0_IRQn 0 */

  /* USER CODE END EXTI0_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
  /* USER CODE BEGIN EXTI0_IRQn 1 */
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//LED引脚翻转输出
  /* USER CODE END EXTI0_IRQn 1 */
}

六.CubeMX配置一个GPIO输入中断的例程

通过连矩阵按键接板子的 PA0 引脚配置成中断输入引脚,PC13 引脚配置成输出,每次按键,PA0 引脚就会进入一次外部中断,每进入一次中断服务程序,改变 PC13 输出电平的高低,从而实现 LED 灯的亮灭。
在这里插入图片描述
打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述

可以查看STM32F103C8T6小系统板原理图,PC13连接LED灯,所以配置PC13为GPIO输出

在这里插入图片描述
配置PA0引脚为外部中断0引脚
在这里插入图片描述
配置PA0引脚下拉,上升沿中断,下拉使PA0初始电平就稳定,上升沿中断信号就稳

在这里插入图片描述
配置外部中断使能
在这里插入图片描述

配置系统主频
在这里插入图片描述
配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述
添加代码,就能实现按下按键一次,进入中断一次
在这里插入图片描述

七.CubeMX工程源代码下载

链接:https://pan.baidu.com/s/1E1kpk8DeTfqcjegv3jUgDQ
提取码:utx7
如果链接失效,可以联系博主给最新链接

程序下载下来之后解压就行

八.讲解视频链接地址

GPIO外部中断实验视频

九.小结

中断是STM32单片机开发中经常会用到的功能,对中断有了一定了解,在开发中应用中断,能使单片机的运行效率提升很多。

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

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

相关文章

四步轻松搞定!探索字节最新AnimateDiff-Lightning:高质量视频生成的秘密武器!

字节前脚刚发布了文生图大模型 SDXL-Lightning,后脚就又对文生视频领域下手了。 就在这几天又推出了文生视频模型:AnimateDiff-Lightning,它是一种快速的文本到视频生成模型。它生成视频的速度比原始 AnimateDiff 快十倍以上,只需…

二、大模型原理(Transformer )

Transformer是一种基于自注意力机制(Self-Attention Mechanism)的深度学习模型,它在2017年由Vaswani等人在论文《Attention Is All You Need》中提出。Transformer模型的出现极大地推动了自然语言处理(NLP)领域的发展&…

浏览器扩展V3开发系列之 chrome.cookies 的用法和案例

【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.cookies API能够让我们在扩展程序中去操作浏览器的cookies。 在使用 chrome.cookies 要先声明…

IDEA中使用leetcode 刷题

目录 1.IDEA下载leetcode插件 2.侧边点开插件 3.打开网页版登录找到cookie复制 4.回到IDEA登录 5.刷题 6.共勉 1.IDEA下载leetcode插件 2.侧边点开插件 3.打开网页版登录找到cookie复制 4.回到IDEA登录 5.刷题 6.共勉 算法题来了不畏惧, 挑战前行是成长的舞台…

中文检测程序(静态代码扫描)

欢迎您关注我们,经常分享有关Android出海,iOS出海,App市场政策实时更新,互金市场投放策略,最新互金新闻资讯等文章,期待与您共航世界之海。 在前些日子,给大家安利了我们在用的AS中文实时检测插…

服务器数据恢复—用raid6阵列磁盘组建raid5阵列如何恢复原raid数据?

服务器存储数据恢复环境: 华为OceanStor 5800存储,该存储中有一组由10块硬盘组建的raid6磁盘阵列,供企业内部使用,服务器安装linux操作系统EXT3文件系统,划分2个lun。 服务器存储故障: 管理员发现存储中rai…

Flask之表单

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、HTML表单 二、使用Flask-WTF处理表单 2.1、定义WTForms表单类 2.2、输出HTML代码 2.3、在模板中渲染表单 三、处理表单数据 3.1、提…

【数据结构与算法】静态查找表(顺序查找,折半查找,分块查找)详解

顺序查找、折半查找、分块查找算法适合的场合。 顺序查找:顺序存储或链式存储的静态查找表均可。 折半查找(二分查找):采用顺序存储结构的有序表。 分块查找(索引顺序查找 ):分块有序表。 …

项目管理计划(DOC原件)

本文档为XXX系统项目管理计划,本计划的主要目的是通过本方案明确本项目的项目管理体系。方案的主要内容包括:明确项目的目标及工作范围,明确项目的组织结构和人员分工,确立项目的沟通环境,确立项目进度管理方法&#x…

【ai】trition:tritonclient yolov4:部署ubuntu18.04成功

X:\05_trition_yolov4_clients\01-python server代码在115上,client本想在windows上, 【ai】trition:tritonclient.utils.shared_memory 仅支持linux 看起来要分离。 client代码远程部署在ubuntu18.04上 ubuntu18.04 创建yolov4-trition python=3.7 环境 (base) zhangbin@ub…

MCU复位时GPIO是什么状态?

大家一定遇到过上电或者复位时外部的MOS电路或者芯片使能信号意外开启,至此有经验的工程师就会经常关心一个问题,MCU复位时GPIO是什么状态?什么电路需要外部加上下拉? MCU从上电到启动,实际可分为复位前和复位后、初始…

uniapp - 微信小程序 - 自定义底部tabbar

废话不多说&#xff0c;直接行源码 这里需要的底部tabbar的图片在这里 我的资源里面呢 图片是这样的 先看成品吧 首先 - BaseApp\components\Tabbar.vue <script setup>import {ref,nextTick,watch} from "vue"// 核心 - 隐藏uniapp自带的底部tabbaruni.hi…

Python爬虫实战:利用代理IP批量下载哔哩哔哩美女视频

文章 目录 1.前言2.爬取目标3.准备工作3.1 环境安装3.2 代理免费获取 四、爬虫实战分析4.1 翻页分析4.2 获取视频跳转链接4.3 下载视频4.4 视频音频合并4.5 完整源码 五、总结 1.前言 粉丝们&#xff08;lsp&#xff09;期待已久的Python批量下载哔哩哔哩美女视频教程它终于来…

火绒被骂惨,良心居然也翻车?剩下3款软件还被误认为外国人开发

万万没想到&#xff0c;公认的国产良心软件“火绒”&#xff0c;居然也翻车&#xff0c;很多网友对其大失所望&#xff0c;甚至忍不住吐槽让他不要砸了自己的招牌。 事情的起因是这样的&#xff0c;火绒推出应用商店&#xff0c;并于正式公测&#xff0c;这是要逐渐走向全家桶的…

1688官方API跨境寻源通API:做外贸反向代购业务必备

item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品&#xff08;拍立淘&#xff09;item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得店铺的所有商品item_password 获得淘口令…

WMS在发展过程中会遇到哪些挑战?

在仓库管理系统&#xff08;Warehouse Management System, WMS&#xff09;的发展过程中&#xff0c;会遇到以下一些挑战&#xff1a; 1、技术整合&#xff1a; 将WMS与现有的ERP&#xff08;企业资源计划&#xff09;、TMS&#xff08;运输管理系统&#xff09;等系统进行有效…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户&#xff0c;流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管&#xff0c;我们没一个人敢催。向副行长汇报情况&#xff0c;又跟客户说。客户跟他们…

通过混合栅极技术改善p-GaN功率HEMTs的ESD性能

来源&#xff1a;Improved Gate ESD Behaviors of p-GaN PowerHEMTs by Hybrid Gate Technology&#xff08;ISPSD 24年&#xff09; 摘要 本工作中&#xff0c;首次证明了混合栅极技术在不增加额外面积和寄生效应的前提下&#xff0c;能有效提升p-GaN HEMTs的栅极静电放电(E…

【C语言】函数strerror和perror详解

<>博客简介&#xff1a;Linux、rtos系统&#xff0c;arm、stm32等芯片&#xff0c;嵌入式高级工程师、面试官、架构师&#xff0c;日常技术干货、个人总结、职场经验分享   <>公众号&#xff1a;嵌入式技术部落   <>系列专栏&#xff1a;C/C、Linux、rtos、…

SpringCloud Alibaba Seata2.0分布式事务AT模式实践总结

这里我们划分订单、库存与支付三个module来实践Seata的分布式事务。 依赖版本(jdk17)&#xff1a; <spring.boot.version>3.1.7</spring.boot.version> <spring.cloud.version>2022.0.4</spring.cloud.version> <spring.cloud.alibaba.version>…