stm32 外部中断

1.每个IO都可以配置外部中断,中断的出发方式有上升沿、下降沿、双边沿。这个是在EXTI里配置。
2.所有IO总共分成了16组,(PA0,PB0…)、(PA1,PB1…)、(PA2,PB2…),…,(PA15,PB15…),这个不用配置。
3.虽然每个IO都可以配置外部中断,但是每个组只能选择一个使能,对于(PA0,PB0…)这个组来说,PA0、PB0、PC0、PD0…、PG0同一时刻只能有1个是使能有作用的。 具体选择哪一个需要配置AFIO。
4.stm32里的中断有抢占优先级和响应优先级的概念,高抢占优先级可以打断低抢占优先级,在抢占优先级相同的情况下,高响应优先级不能打断低响应优先级。 外部中断的优先级在NVIC里控制。
5.16个外部中断“按理”说应该有16个外部中断服务函数,实际上只有6个服务函数,其中EXTI5到EXTI9共用一个服务函数,EXTI10到EXTI15共用一个服务函数。抢断优先级和响应优先级具体能分成多少个级别,需要设置,分成NVIC_PRIORITYGROUP_2这种类型,抢占优先级取值范围0-3,响应也是0-3。
中断信号传输流程:GPIO口有电平信号的改变,AFIO判断该GPIO口有没有中断使能,如果有传入EXTI,EXTI检测该电平信号是上升沿还是下降沿,如果是规定的中断触发信号,传入NVIC,NVIC根据该中断的优先级在合适和时间传给CPU,CPU进入外部中断服务函数,如EXTI0亦或是EXTI15_10。
在这里插入图片描述
6.配置流程(配置PA0外部中断)
1.使能GPIO时钟

__HAL_RCC_GPIOA_CLK_ENABLE(); //使能时钟

2.设置GPIO输入模式
3.设置AFIO(开启时钟、IO映射)
4.设置EXTI(屏蔽、上\下沿)

GPIO_InitTypeDef gpioinit_struct;
gpioinit_struct.Mode = GPIO_MODE_IT_FALLING;  //下降沿触发
gpioinit_struct.Pin = GPIO_PIN_0;
gpioinit_struct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &gpioinit_struct);//输入模式、下降沿触发、IO映射 

5.设置NVIC(优先级分组—>设置优先级—>使能中断)

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//优先级分组,在HAL_Init()函数中修改,默认是NVIC_PRIORITYGROUP_4HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0); //设置抢占和响应的优先级
HAL_NVIC_EnableIRQ(EXTI0_IRQn);//使能EXTI0这根线

6.设计中断服务函数

void EXTI0_IRQHandler()//固定名称。在startup_....xb.s中
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//清除中断标志位,调用HAL_GPIO_EXTI_Callback函数
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//重构函数  __weak需要重构
{delay_ms(20);//消抖,为演示而演示,实际中断中不建议用delay, if(GPIO_Pin == GPIO_PIN_0){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)led1_toggle();}
}

7.完整的EXTI.c和.h文件

#include "sys.h"
#include "exti.h"
#include "led.h"
#include "delay.h"
void exti_init(void)
{__HAL_RCC_GPIOA_CLK_ENABLE(); //使能时钟GPIO_InitTypeDef gpioinit_struct;gpioinit_struct.Mode = GPIO_MODE_IT_FALLING;  //下降沿触发gpioinit_struct.Pin = GPIO_PIN_0;gpioinit_struct.Pull = GPIO_PULLUP;gpioinit_struct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &gpioinit_struct);HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);HAL_NVIC_EnableIRQ(EXTI0_IRQn);}void EXTI0_IRQHandler()//startup_....xb.s中
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);//复位中断位,调用HAL_GPIO_EXTI_Callback函数
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//重构函数
{delay_ms(20);if(GPIO_Pin == GPIO_PIN_0){if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)led1_toggle();}
}
#ifndef __EXTI_H__
#define __EXTI_H__void exti_init(void);#endif

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

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

相关文章

【Proteus仿真】基于51单片机的电机调速和速度实时显示

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,可采用按键对电机进行方向的调控和速度的加减,并通过DAC0832设置放大电路进行对电机的设置,通过四位数码管显示电机转向和速度,非常精…

LLMs之PE:AI for Grant Writing的简介、使用方法、案例应用之详细攻略

LLMs之PE:AI for Grant Writing的简介、使用方法、案例应用之详细攻略 目录 AI for Grant Writing的简介 AI for Grant Writing的使用方法—提示资源 1、提示集合 2、提示工程 3、快速提示 为了提高文本清晰度 为了让文本更有吸引力 为了改进文本的结构和流…

变压器设备漏油数据集 voc txt

变压器设备漏油数据集 油浸式变压器通常采用油浸自冷式、油浸风冷式和强迫油循环三种冷却方式。该数据集采集于油浸式变压器的设备漏油情况,一般用于变电站的无人巡检,代替传统的人工巡检,与绝缘子的破损检测来源于同一课题。数据集一部分来自…

LeetCode 2374.边积分最高的节点:模拟

【LetMeFly】2374.边积分最高的节点:模拟 力扣题目链接:https://leetcode.cn/problems/node-with-highest-edge-score/ 给你一个有向图,图中有 n 个节点,节点编号从 0 到 n - 1 ,其中每个节点都 恰有一条 出边。 图…

hCaptcha 图像识别 API 对接说明

本文将介绍一种 hCaptcha 图像识别 API 对接说明,它可以通过用户输入识别的内容和 hCaptcha验证码图像,最后返回需要点击的小图像的坐标,完成验证。 接下来介绍下 hCaptcha 图像识别 API 的对接说明。 申请流程 要使用 API,需要…

使用思科搭建企业网规划训练,让网络全部互通,使用规则提高工作效率。

1. 企业背景: 某企业分为销售部、行政部、人力资源部、财务部、业务部、接待中心等主要六个部门;配置网管中心,允许网络管理员登录企业交换机和路由器对企业网络进行管理;配置服务器集群,设置FTP、DNS、WEB服务器&am…

泛微开发修炼之旅--44用友U9与ecology对接方案及源码

文章链接:44用友U9与ecology对接方案及源码

蓝桥杯算法之暴力

暴力 1.十进制数转换成罗马数字 2.判断给出的罗马数字是否正确 小知识 %(模除): % 符号用作模除(或取模)运算符。模除运算是一种数学运算,它返回两个数相除的余数。 具体来说,如果 a 和 b 是…

分布式系统的CAP原理

CAP 理论的起源 CAP 理论起源于 2000 年,由加州大学伯克利分校的 Eric Brewer 教授在分布式计算原理研讨会(PODC)上提出,因此 CAP 定理又被称作布鲁尔定理(Brewer’s Theorem)。2002 年,麻省理…

低代码开发平台:高效开发新体验

在数字化转型的浪潮中,企业对软件开发的需求日益加剧,对开发效率和响应市场变化的速度有着前所未有的要求。传统的软件开发方法由于其复杂性和耗时性,已经逐渐难以满足这种快速变化的需求。低代码平台作为一种新兴的开发工具,因其…

C语言理解 —— printf 格式化输出

目 录 printf 函数一、短整型输出二、长整型输出三、浮点型输出四、字符型输出五、字符串输出六、注意问题 printf 函数 在软件开发过程中,通常需要打印一些字符串信息,或把一些变量值输出到上位机显示。打印函数printf是最常用的。 一般格式&#xff…

STM32篇:通用输入输出端口GPIO

一.什么是GPIO? 1.定义 GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚STM32芯片的GPIO引脚与 外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。 简单来说我们可以控制GPIO引脚的电平变化,达到我们的各种目的…

文献阅读(220)MRCN

题目:MRCN: Throughput-Oriented Multicast Routing for Customized Network-on-Chips时间:2023期刊:TPDS研究机构:韩国成均馆大学 这篇论文探讨的问题是多播死锁问题,下图中Packet A分成两条路径,但在rou…

伊丽莎白·赫莉为杂志拍摄一组素颜写真,庆祝自己荣膺全球最性感女人第一名

语录:女性应该做任何她们想做的事,批评她们的人都见鬼去吧。 伊丽莎白赫莉为《Maxim》杂志拍摄一组素颜写真,庆祝自己荣膺全球最性感女人第一名 伊丽莎白赫莉 (Elizabeth Hurley) 实在是太惊艳了,如今,《马克西姆》杂…

对话Chat和续写Completion的区别

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 对话Chat 对话Chat功能主要适用于模拟人类对话的场景,例如智能客服、智能问答和聊天机器人等。它允许用户与模型进行多轮次交互,从而模拟真实的对话…

Python中的数据可视化:从基础图表到高级可视化

数据可视化是数据分析和科学计算中不可或缺的一部分。它通过图形化的方式呈现数据,使复杂的统计信息变得直观易懂。Python提供了多种强大的库来支持数据可视化,如Matplotlib、Seaborn、Plotly等。本文将从基础图表入手,逐步介绍如何使用这些库…

mybatis 配置文件完成增删改查(一):直接查询所有信息

文章目录 编写三步走查询所有编写接口方法编写sql语句执行方法,测试结果数据库字段名和实体类变量名不一致:ResultMap数据库字段名和实体类变量名不一致:方法二 编写三步走 编写接口方法:Mapper接口 参数有无 结果类型编写sql语句…

分布式环境中解决主从延时的一些思路

目录标题 MySQL主从复制复习为什么要做主从复制?主从复制的原理主从延迟的原因? 解决思路1. 读写分离与延迟容忍2. 异步复制优化3. 缓存机制(常用)4. 最终一致性方案(常用)5. 主从切换与自动故障恢复&#…

多无人机通信(多机通信)+配置ssh服务

目录 多机通信 设备 主从机通信设置 配置从机 配置主机 测试 正式启用 MAVROS通信 多机通信 多机通信是实现机器人编队的基础,通过网络搭建通信链路。我们这里用中心节点网络通信,所有数据需有经过中心节点,所以,中心节点…

Codeforces Round 974 (Div. 3)D题解析

前三道太水了,第三道一眼二分,就是需要注意要超过一半人就行,我因为检查了好久 D. Robert Hood and Mrs Hood 抱歉,我是蒟蒻,我看到区间问题就想到了线段树,我们只需要用线段树去维护每个点药经历多少任务…