当前位置: 首页 > news >正文

【STM32】外部中断

当程序正常运行执行main函数,此时如果外部中断来了,执行外部中断函数,实现相应的功能,然后就可以回到main.
一般stm32芯片每个引脚都有自己的外部中断,但是为了限制,会有一个中断线,对应一个中断线执行一个外部中断函数
PA0,PB0,PC0为中断线0

PA1,PB1,PC1为中断线1

我们实现PA7,按键1按下触发中断,然后使LED1(PB10)翻转

配置stmcubemx和上一篇一样

1.配置GPIO

使用灯和按键,所以要配置GPIOA,GPIOB,以及GPIOA,GPIOB模式初始化。
在这里插入图片描述
MY_LED声明
在这里插入图片描述

设置GPIOB
在这里插入图片描述

2.设置中断优先级分组

其实中断优先级分组已经设置好,HAL_Init();
在这里插入图片描述

在这里插入图片描述
这个函数就是设置中断优先级组的.
在这里插入图片描述
默认有5个中断优先级分组,中断优先级分抢占优先级和响应优先级,不同的优先级分组,抢占,响应占比不一样.不一定NVIC_PRIORITYGROUP_4 的优先级就高,只能说明该分组抢占优先级的范围为0-15,看具体怎么设置,两个中断,如果抢占优先级相同的话,就比较响应优先级谁小,谁的优先级就高,如果一个的抢占优先级数值小的话,就直接不用比较响应优先级了,直接抢占优先级数值小的优先级就高.默认设置中断优先级组为4的话,说明四位都是抢占优先级位,没有响应优先级

3.设置优先级

在这里插入图片描述

HAL_NVIC_SetPriority();//设置优先级

因为我们使用的是PA7位实现中断,所以对应中断线7,
在这里插入图片描述
但是发现没有中断线7,这里人家是把中断线5-9放在一个里面,设置EXTI9_5IRQn
在这里插入图片描述

4.打开中断

HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);  //打开中断

在这里插入图片描述

5.实现中断函数

在这里插入图片描述
在这里插入图片描述

找对应中断线的中断函数
在这里插入图片描述
中断函数1去调用中断函数2
在这里插入图片描述
但是真正的中断函数可以理解为需要我们重写这个函数,可以看一下定义
在这里插入图片描述
我们自己实现,实现灯的翻转
在这里插入图片描述

6.全部实现在.h声明

stm32f4xx_it.h
在这里插入图片描述
这个不用声明
在这里插入图片描述

gpio.h

在这里插入图片描述

7.main.c调用

在这里插入图片描述
在这里插入图片描述
但是我们发现下载之后按下按键后没有实现灯的翻转,这里的原因如下:
在这里插入图片描述
此时在处理中断函数,他的抢占优先级是0,响应优先级是0,而延迟函数去抖动使用的是滴答定时器,他使用的中断优先级是多少呢?我们可以在STMCUBEMX里面看
在这里插入图片描述
滴答定时器的抢占优先级为15,也就是最低级,他会阻塞等待该中断函数处理完,才能解除阻塞,
所以我们需要注释掉延时去抖动函数即可
在这里插入图片描述

8.演示

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ | Leetcode C++题解之第406题根据身高重建队列
  • 栈与队列(c语言实现)
  • linux命令学习-sed命令
  • Unity教程(十五)敌人战斗状态的实现
  • C#使用TCP-S7协议读写西门子PLC(五)-测试程序
  • 【C语言学习路线】
  • 【JavaScript】LeetCode:36-40
  • 系统架构设计师 需求分析篇一
  • vue中动态引入加载图片不显示
  • AI大模型与产品经理:替代与合作的深度剖析
  • 说⼀说hashCode()和equals()的关系
  • Corrupt block relative dba: 0x02c0b382 (file 11, block 45954)
  • 动态内存
  • 【Obsidian】当笔记接入AI,Copilot插件推荐
  • 函数模板(初阶)
  • 【面试系列】之二:关于js原型
  • 【前端学习】-粗谈选择器
  • 2017届校招提前批面试回顾
  • ERLANG 网工修炼笔记 ---- UDP
  • Facebook AccountKit 接入的坑点
  • Golang-长连接-状态推送
  • JavaScript设计模式之工厂模式
  • node.js
  • PAT A1120
  • Redis 懒删除(lazy free)简史
  • Redis的resp协议
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SQLServer之创建数据库快照
  • Terraform入门 - 1. 安装Terraform
  • text-decoration与color属性
  • use Google search engine
  • win10下安装mysql5.7
  • 记录一下第一次使用npm
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 码农张的Bug人生 - 初来乍到
  • 你真的知道 == 和 equals 的区别吗?
  • 前端相关框架总和
  • # 透过事物看本质的能力怎么培养?
  • #单片机(TB6600驱动42步进电机)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (7)STL算法之交换赋值
  • (LeetCode C++)盛最多水的容器
  • (python)数据结构---字典
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (六)Flink 窗口计算
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)Controller接口控制器详解(三)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一) 初入MySQL 【认识和部署】
  • (一)为什么要选择C++
  • (转)JAVA中的堆栈
  • (转)jdk与jre的区别
  • (转)Oracle 9i 数据库设计指引全集(1)