STM32学习笔记——中断

news/2024/11/15 23:24:45/文章来源:https://www.cnblogs.com/husai/p/18408398

中断:在主程序运行过程中,出现了特定事件(例如发生已经预知的一些情况),从而转入中断程序中,处理完成后再回到主程序中继续执行。(频繁的中断函数会影响主程序的运行,所以中断函数一边不处理特别复杂的逻辑)

EXTI(Extern Interrupt)外部中断

支持的触发方式:上升沿/下降沿/双边沿/软件触发

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断

通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒(0-15:对应GPIO_PIN 0-15中断;16:PVD输出;17:RTC闹钟事件;18:USB唤醒事件;19:连接到以太网唤醒事件(只适用于互联型产品))

触发响应方式:中断响应/事件响应

注意EXTI9_5和EXTI15_10这几个中断在两个通道里,需要通过标志位判断。

EXTI中断发生流程:EXTI监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序。

 

NVIC(Nested vectoredinterrupt controller)嵌套向量中断控制器

NVIC提供了灵活、高效、可扩展的中断处理机制,支持多级优先级、多向中断、嵌套向量中断等特性。

NVIC支持多级优先级,可以配置不同的优先级和互斥优先级组。中断控制器负责中断的挂起、解挂和优先级管理。

 

通过检测GPIO的PB14的电平变化触发中断的实例:

初始化:

void EXTI_NVIC_Init(void){/* GPIO --> AFIO */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);    //开启GPIOB口时钟,因为检测的是PB14口的电平信号RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //开启AFIO时钟GPIO_InitTypeDef GPIO_InitStructure;                    //初始化PB14引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);/* AFIO -->  EXTI */EXTI_InitTypeDef EXTI_InitStructure;                    //初始化EXTIEXTI_InitStructure.EXTI_Line =EXTI_Line14;                //选择14号线EXTI_InitStructure.EXTI_LineCmd =ENABLE;                //14号线使能EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;        //选择模式,这里是中断模式触发中断,如果是EXTI_Mode_Event,就是触发一个事件EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling; //触发方式:EXTI_Trigger_Falling ,EXTI_Trigger_Rising_Falling ,EXTI_Trigger_Rising,这里选的是下降沿触发EXTI_Init(&EXTI_InitStructure);/* EXTI -->  NVIC */                                    //开启NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);            //设置优先分组为2,这里是随便设置的
    NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = 40;                    //EXTI15_10_IRQn=40, /*!< External Line[15:10] Interrupts */ 选择配置EXTI15_10线这里PB14在EXTI15_10中NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;            //线路使能NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;    //抢占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;            //响应优先级NVIC_Init(&NVIC_InitStruct);                            //初始化
}

中断函数:

void EXTI15_10_IRQHandler(void){                    //函数名为预留的指定名称,可以从启动文件复制//中断标志位判断if(EXTI_GetITStatus(EXTI_Line14) == SET){        //判断是否是14号线触发的中断/*可添加一些操作*count++;*/EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试-JS Web API-DOM

概览DOM(Document Object Model)DOM是哪种数据结构? ---树🌳 常用的API attr和property区别 一次性插入多个DOM节点?DOM节点操作DOM节点的property 通过获取JS属性来改变样式or页面渲染形式。DOM节点的attribute 修改节点的属性。建议尽量用property操作。

送给测试行业朋友们的一些中肯建议

在快速发展的科技时代,软件测试行业也在不断变化。如果你是一名测试人员,或正在考虑进入这个行业,你是否感到迷茫?该如何提升自己,以应对未来的挑战?今天,我为所有测试行业的朋友们带来一些切实的建议,助你们走得更远。 作为测试人员,你是否经常面对需求变化、测试工具…

【Azure Cloud Service】在Azure云服务中收集CPU监控指标和IIS进程的DUMP方法

问题描述 在使用Cloud Service服务时,发现服务的CPU占用很高,在业务请求并不大的情况下,需要直到到底是什么进程占用了大量的CPU资源,已经如何获取IIS进程(w3wp.exe)的DUMP文件?问题解答 一:收集云服务中CPU的性能数据 远程登录(RDP)到云服务的实例上,使用管理员身份运行…

Blazor开发框架Known-V2.0.10

Known今天迎来了2.0的第11个版本,同时网站网址和板块也进行了一次升级改造,虽不完美,但一直在努力改变,之前一直在完善框架功能,忽略了文档的重要性,所以这次更新了文档和API。交流互动板块也在进行当中,尽请期待。官方网站:http://known.org.cn 最新版本:V2.0.10下面…

个人项目:论文查重

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 独立完成一个论文查重的个人项目;在项目开发中学习PSP表格的使用;学习使用Github仓库进行代码管…

Cesium源码解读之Viewer(全网最全)

今天我们来扒一扒cesium 的源码, 探寻一下底层的奥秘,我们平时工作中用的最多的应该就是var viewer = new Cesium.Viewer(cesiumContainer);这句了但我们却很少去了解他底层是否如何实现的。 首先 我们可以通过Source/Cesium.js找到api 的入口然后一步步往下走.... 这个是我理…

关闭默认WPS打开方式

原文链接:https://blog.csdn.net/Candy_SJ_/article/details/139898009 文件默认为wps打开,有时候有很多问题。关闭wps默认打开方式 还是有问题,我这边是将wps卸载了。

0基础开始Pine量化 止盈改进策略(附代码)

止盈的核心思想: 当市场价格达到设定的目标后,投资者会卖出资产,防止市场波动将已经取得的利润变为损失。 通过止盈,投资者在确保一定盈利的情况下退出市场,而不是继续持有以追求更高的收益,从而避免市场行情逆转带来的风险。0基础开始Pine量化 止盈改进策略(附代码) 可…

词表示与语言模型、大模型背后的范式

这张幻灯片讨论了大模型背后的范式,特别是预训练和微调的基本范式可以追溯到迁移学习。以下是主要内容:迁移学习 :预训练和微调的基本范式可以追溯到迁移学习。 人类可以应用之前学到的知识更快地处理新问题,我们希望机器也具有类似的能力。传统机器学习 vs. 迁移学习 :左…

词表示与语言模型

不积跬步,无以至千里;不积小流,无以成江海。

文件对比工具--BeyondCompare

💖简介 Beyond Compare 是一款功能强大的文件和文件夹比较工具,由Scooter Software开发。它可以帮助用户轻松地比较文件和文件夹的差异,并且可以合并变化、同步文件以及备份重要数据 💻环境 windows 📖版本 Beyond Compare v5.0.2 🔗地址 https://www.scootersoftwar…

基于sqli-labs Less-1的sql注入原理详细讲解

SQLi Labs 是一个专为学习和测试 SQL 注入漏洞而设计的实验室平台。它旨在帮助安全研究人员、开发者以及网络安全爱好者深入理解和实践各种 SQL 注入攻击。SQLi Labs 提供了一系列精心设计的实验室环境和挑战,模拟真实的 SQL 注入漏洞,并提供相应的解决方案。 关于sqli-labs靶…