stm32-中断的使用和原理

news2024/10/7 20:25:09
一 什么是中断 :
轮询机制 :顾名思义,就是每轮都询问一次。比如 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.coloradmin.cn/o/1618705.html

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

相关文章

AI-数学-高中-40法向量求法

原作者视频:【空间向量】【考点精华】3法向量求法稳固(基础)_哔哩哔哩_bilibili 注意:法向量对长度没有限制,求法向量时,可以假设法向量z为任意一个取非0的值。 示例1: 示例2:

Golang | Leetcode Golang题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; func firstMissingPositive(nums []int) int {n : len(nums)for i : 0; i < n; i {for nums[i] > 0 && nums[i] < n && nums[nums[i]-1] ! nums[i] {nums[nums[i]-1], nums[i] nums[i], nums[nums[i]-1]}}for i …

含纽扣电池产品出口美国UL4200A:2023标准

该标准已于2023年10月23日正式生效&#xff0c;而16 CFR 1263也于同日生效。美国消费品安全委员会&#xff08;CPSC&#xff09;将给予从2023年9月21日至2024年3月19日的180天执法过渡期&#xff0c;而16 CFR 1263法案的强制执行日期为2024年3月19日。这意味着制造商和销售商有…

第26天:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

第二十六天 一、PHP新闻显示-数据库操作读取显示 1.新闻列表 数据库创建新闻存储代码连接数据库读取页面进行自定义显示 二、PHP模版引用-自写模版&Smarty渲染 1.自写模版引用 页面显示样式编排显示数据插入页面引用模版调用触发 2.Smarty模版引用 1.下载&#xff1a…

【Linux高性能服务器编程】两种高性能并发模式剖析——半同步/半异步模式

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之两种高性能并发模式介绍&#xff0c;在这篇文章中&#xff0c;你将会学习到高效的创建自己的高性能服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解…

PHP-001、PHP学习之PhpStorm+PhpStudy环境安装

一、说明 由于当前需要&#xff0c;暂时停止学习python&#xff0c;当然有时间继续&#xff0c;转为php&#xff0c;听说php开发网站、小程序等运行效率更高&#xff0c;朋友那边再做这个&#xff0c;准备学习一下&#xff0c;和朋友们一起来吧&#xff0c;就这开发环境安装&a…

李沐60_机器翻译数据集——自学笔记

!pip install d2limport os import torch from d2l import torch as d2l下载和预处理数据集 在这个将英语翻译成法语的机器翻译问题中&#xff0c; 英语是源语言&#xff08;source language&#xff09;&#xff0c; 法语是目标语言&#xff08;target language&#xff09;。…

求职招聘小程序源码系统 全开源源代码:找工作+招人才功能强大 带完整的安装代码包以及搭建教程

互联网的深入发展&#xff0c;求职招聘已经不再是传统的线下模式所能满足的。越来越多的企业和求职者开始倾向于线上招聘&#xff0c;寻找更加便捷、高效的求职招聘方式。因此&#xff0c;我们结合市场需求和技术发展趋势&#xff0c;推出了这款求职招聘小程序源码系统。 该系…

VNISEdit 制作安装包

1. 环境依赖 1.1. NSIS 下载 下载地址&#xff1a;https://nsis.sourceforge.io/Download 1.2. VNISEdit 下载 下载地址1&#xff1a;https://sourceforge.net/projects/hmne/ 下载 exe 安装。 下载地址2&#xff1a;https://hmne.sourceforge.net/ 可以下载 exe 安装。也…

OurBMC大咖说|第4期:基于飞腾腾珑E2000的国产化BMC固件开发简介

栏目介绍&#xff1a;"OurBMC大咖说" 是由 OurBMC 社区精心策划的线上讲座栏目&#xff0c;邀请 BMC 相关领域大咖共同探讨 BMC 全栈技术的发展趋势、挑战和机遇。无论你是初学者还是资深从业者&#xff0c;"OurBMC大咖说" 都将为你提供一个宝贵的学习和交…

如何确定IP地址的地理位置

IP地址的地理位置确定是一个复杂而精细的过程&#xff0c;它结合了多种技术与方法来推断或确定设备在网络中的大致物理位置。以下是对IP地址地理位置确定过程的详细解释&#xff1a; 首先&#xff0c;我们要理解IP地址本身并不能直接反映物理位置信息。IP地址主要是用于在网络中…

路由引入,过滤实验

实验拓补图 实验目的&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 loopback口模拟业务网段 2、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4运行 OSPF&#xff0c;各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的…

计算机java项目|springboot档案管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

工业级扫描式避障型激光雷达选型指南

工业级扫描式激光避障型传感器选型指南 在工业自动化领域&#xff0c;扫描式激光避障型传感器已成为不可或缺的关键组件。其高精度、高可靠性以及快速响应能力&#xff0c;使得机器人在复杂环境中能够安全、高效地执行任务。然而&#xff0c;面对市场上众多的传感器产品&#…

【S32DS RTD实战】-1.5-S32DS使用Post-Build调用第三方插件-自动对生成的s19,Hex,Bin文件二次编辑

<--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景&#xff1a; 在《【S32DS RTD实战】-1.3-S32K3工程生成S19&#xff0c;BIN&#xff0c;Hex文件&#xff0c;以及Post-build steps的妙用_s32ds如何生成s19或hex文件-CSDN博客https://blog.csdn.net/qfmzhu/articl…

RTU遥测终端为城市排水安全保驾护航!

近年来&#xff0c;全球气候变迁与城市化进程不断加速&#xff0c;导致强降雨事件频发&#xff0c;道路低洼地带、下穿式立交桥和隧道等区域在暴雨中常易积水&#xff0c;严重阻碍了人民的出行&#xff0c;甚至危及生命与财产安全。而传统的排水管网管理方式已难以适应现代城市…

【大模型系列】预训练

数据 数据预处理 预处理流程&#xff1a; 原始语料库—>质量过滤&#xff08;语种过滤、统计过滤、关键词过滤、分类器过滤&#xff09;—>敏感内容过滤&#xff08;有毒内容、隐私内容PII&#xff09;—>数据去重&#xff08;句子级别、文档级别、数据集级别&#…

【python】Python学生信息管理系统(源码+报告+本地存储)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

stack、queue(priority_queue)的模拟实现和deque的简单介绍

stack和queue(priority_queue) 1. 容器适配器 适配器(Adapter)&#xff1a;一种用来修饰容器(Containers)或仿函数(Functors)或迭代器(Iterator)接口的东西。 适配器是一种设计模式&#xff0c;该模式将一个类的接口转换成客户希望的另外一个接口。 现实中拿插座来说&#xf…

Linux:Win10平台上,用VMware安装Centos7.x及系统初始化关键的相关配置(分步骤操作,详细,一篇足以)

VMware安装Centos7.x镜像的详细步骤&#xff1a;VMWare安装Centos系统&#xff08;无桌面模式&#xff09; 我这里是为了安装Hadoop集群&#xff0c;所以&#xff0c;以下这些步骤是必须进行的 如果你是学习Linux&#xff0c;可以跳过非必须的那些配置项 我安装的版本是&…