stm32-中断的使用和原理

embedded/2024/9/24 0:21:04/
一 什么是中断 :
轮询机制 :顾名思义,就是每轮都询问一次。比如 while 循环的每一次,就会执
行检查, 1. 此处串口是否有数据到来。 2. 每次都检测一下引脚状态 , 是否为低电
平。
本质是 while 循环每一次都把数据获取的函数或者寄存器执行一次,看看数据是
否发生变化。
中断机制:中断也是一种对于数据获取的调度方式。通过中断源来提醒 CPU ,数
据已经更新,可以读取新数据。
从上图可以观察到 NVIC 的有一部分是接到了 EXTI 的器件, EXTI ,中文名称
部中断 / 事件控制器 。这个器件有 16 根线路连接到了不同的引脚上。比如
PAO,PA1 等等。我们板子所有的 GPIO 引脚都连接着各自相应的 外部中断控制
器。
二,什么是外部中断
凡是要经过 EXTI 到达 NVIC 的中断,都叫做 外部中断 。内部中断不经过 EXTI
外部中断与内部中断路线示意如下
上图紫色线路为轮询机制。黑色线路部分为内部中断。红色线路部分为外部中断
思考:为什么要 EXTI 这个结构。引脚线路为什么不直接见到 NVIC 上去
原因1:因为 NVIC 处理的是中断信号,不是电平信号。 usart TIM IIC 这些芯片
内部器件本身就可以产生中断信号,因此就可以直接与NVIC 连接。但是,光突
突的 GPIO 本身就是一根电线,肯定不具备产生中断信号的功能。因此连接
EXTI ,依靠 EXTI 产生中断信号。
原因 2 :中断通达数量比较少, EXTI 的多路复选的功能扩充了接口。一个 EXTI
以接 16 GPIO 引脚呢。
三,外部中断的使用
3.1 他是什么样子
 
着重注意 ** EXTI0 16 根引脚接的是 GPIO 所有组的第 0 个成员。 EXTI1 管着所
GPIO 组的第 1 个成员。。。。。。 EXTI16 管着所有 GPIO 组的第 16 个成员 .
因此:我们希望红外传感器(我接在 PF13 上)对人的感知,采用中断形式上
报。过程如下;
红外传感器数据传输到引脚 PF13 。所以,该引脚硬件连接在 EXTI13 上。 EXTI13
发送数据到 NVIC 上, core 内核调用相应中断服务函数。
3.2 外部中断如何使用。
3.2.1 任务分配
3.2.2 任务分配 pir 代码检查
void pir_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void pir_run()
{
if(PFin(13) == 1)
{
printf("有人靠近\n");
}
else
{
printf("周边没人\n");
}
}
3.2.3 确认引脚
从代码去人引脚 PF13 GPIO F 组的第 13 个成员。
组号: GPIOF
成员号: GPIO_Pin_13
3.2.4 工程添加文件
点击位置
3.2.5 代码编写流程图
3.2.5.1 连接 PF13 EXTI13
函数解释:告诉程序你要用哪一个 EXTI ,并用哪一根引脚。
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx, EXTI_PinSourcex)
参数 1 EXTI_PortSourceGPIOx ,第几组。
参数 2 EXTI_PinSourcex ,第几根。
3.2.5.2EXTI 参数配置
函数解释:告诉程序让哪一个 EXTI 以什么形式工作。
EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
结构体名字 .EXTI_Line = 到底是哪一个
EXTI.EXTI_Line2/EXTI_Line3;
结构体名字 .EXTI_LineCmd = 是否开始工作。
结构体名字 .EXTI_Mode = 检测中断呢还是事件 ;
结构体名字 .EXTI_Trigger = 何种电平信号为依据 ;
3.2.5.3 优先级分组
NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
函数解释:对于四个比特位进行划分为两个数据段。不同的划分行为影响流程图
第四步的优先级配置。
参数 1 NVIC_PriorityGroup ,这里模仿了 IP 地址子网划分的思想,进行分组。
NVIC_PriorityGroup_0\NVIC_PriorityGroup_1\NVIC_PriorityGroup_2\NVIC_Pri
orityGroup_3\NVIC_PriorityGroup_4
3.2.5.4NVIC 参数配置 
NVIC_Init(&NVIC_InitStruct);
函数解释:告诉 NVIC 检测拿一根电线(中断通道),以什么样子的 优先级
来处理
参数 1 :第几根中断通道,以第几组优先级别(抢占优先级),第几成员优先级
别(响应优先级)来处理,
NVIC_InitStruct.NVIC_IRQChannel = 中断通道;
NVIC_InitStruct.NVIC_IRQChannelCmd = 开始工作;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =抢占优先
级;
NVIC_InitStruct.NVIC_IRQChannelSubPriority =相应优先级
3.2.5.4 中断服务函数
void EXTI15_10_IRQHandler()
{
}
函数解释:中断出发后会调用这个函数。其中内容标准写法如下。
1. 查看标记位,确认中断。
2. 执行想要执行的内容。
3. 清楚标记位,并退出。
3.2.6 代码验证和代码整理
void pir_interrupt_init()
{
//exti13与F13连接
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF,EXTI_PinSource13
);
//配置EXTI
EXTI_InitTypeDef EXTI_InitStruct;
EXTI_InitStruct.EXTI_Line = EXTI_Line13;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_Init(&EXTI_InitStruct);
//分组模式
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority =2;
NVIC_Init(&NVIC_InitStruct);
}
中断服务函数展示如下:
static uint32_t i = 0;
void EXTI15_10_IRQHandler()
{
if(EXTI_GetITStatus(EXTI_Line13) != RESET)//确认中断事件
{
i++;
if(i%2 == 0)
{
printf("有人靠近\n");
}
else
{
printf("有人离开\n");
}
EXTI_ClearITPendingBit(EXTI_Line13);//清除挂起中断标志位
}
}
四,总结原理深化
中断根据中断信号来源不同,分为内部中断和外部中断。
外部中断:中断信号来自 “EXTI”, 信号经过 EXTI 的,都是外部中断。否则都是内
部中断。
常见的外部中断: KEY 开关,触发类的传感器( PIR ),警报设备和诱捕设备。
内部中断:不经过 EXTI 的就是内部中断,常见的内部中断有,定时器 TIM ,串口
usart ,主要是通信类的接口。

http://www.ppmy.cn/embedded/12171.html

相关文章

元宇宙红色教育3d沉浸式体验是党与公众沟通的桥梁

政务大厅是服务群众的第一窗口,是展现城市文明形象的重要载体,为了营造更科技便民、文明高效的窗口形象,政府单位引进VR虚拟现实和元宇宙技术,进行元宇宙政务大厅平台搭建,让公民与政府的互动方式得到革新,…

C#-使用Harmony库实现DLL文件反射调用

一. Harmony工作原理 利用C#运行时Runtime的反射机制,动态加载dll中的方法,字段,属性,实现对DLL方法的重写和代码注入。 二. Harmony下载及安装 1.下载Harmony_lib库lib.harmony.2.3.3.nupkg 霸王•吕布 / CSharpHarmonyLib GitCodehttps://gitcode.net/qq_35829452/csharph…

华硕电脑怎么恢复删除的文件?有5种可以选择的方案

在日常使用华硕电脑的过程中,我们难免会遇到误删重要文件的情况。无论是因为不小心按错了键,还是由于某种软件故障,失去这些文件都可能会给我们带来不小的麻烦。那么,面对这样的情况,我们该如何有效地恢复这些被删除的…

百度文心一言:官方开放API开发基础

目录 一、模型介绍 1.1主要预置模型介绍 1.2 计费单价 二、前置条件 2.1 创建应用获取 Access Key 与 Secret Key 2.2 设置Access Key 与 Secret Key 三、基于千帆SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 文心一言(英文名&…

Codeforces Round 816 (Div. 2)(D拆位图论构造 E斜率优化)

C&#xff1a;直接单独算每个位置的贡献&#xff0c;如果当前位置和前面位置重复了&#xff0c;那么前面就没选的位置了 修改的时候只要重新算i和i1位置即可 #include<bits/stdc.h> using namespace std; const int N3e510,M2*N,mod1e97; #define int long long #defin…

echarts之事件交互

ECharts 是一个优秀的开源可视化库&#xff0c;支持丰富的图表类型和交互功能。其中&#xff0c;事件交互是 ECharts 中非常重要的一部分&#xff0c;可以实现用户与图表的互动&#xff0c;比如点击、鼠标悬停等操作。下面我将为你介绍如何在 ECharts 中实现事件交互&#xff0…

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c++推理

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理 文章目录 阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理简介环境部署下载源码安装环境下载模型 测试一下看看效果模型转onnx测试一下生成的onnx模型看看效果C 推理 简介 DDColor是…

jmeter--取样器-- HTTP请求

HTTP请求&#xff08;HTTP Request&#xff09; 右键 >>> 添加 >>> 取样器 >>> HTTP请求&#xff08;HTTP Request&#xff09;基本web服务器协议&#xff1a;https服务器名称或IP&#xff1a;端口号&#xff1a;443HTTP请求请求方式&#xff1a;路…