STM32——外部中断

news2024/10/5 19:14:53

目录

外部中断简述

什么是外部中断

传统单片机与新型单片机外部中断区别

 STM32外部中断请求

STM32中断线与IO口的对应 

STM32 中断服务函数 

外部中断与中断服务函数的对应

 中断服务函数列表 

STM32外部中断程序编写

常用的库函数

外部中断的一般配置步骤 


外部中断简述

什么是外部中断

  • 当某种外部事件发生时,单片机的中断系统将迫使 CPU 暂停正在执行的程序从而进行中断事件的处理,中断事件处理完毕后,又返回被中断的程序处,继续执行

注:外部事件具体是指: 上升沿 、 下降沿 、 低电平 等 

传统单片机与新型单片机外部中断区别

51单片机stm32单片机
两个IO口进行外部中断全部IO口都可以作为外部中断
固定IO口映射到IO端口 

 STM32外部中断请求

STM32的中断控制器支持19个外部中断/事件请求

  • 线 0~15 :对应外部IO口的输入中断
  • 线16 :连接到PVD输出
  • 线17 :连接到RTC闹钟事件
  • 线18 :连接到USB唤醒事件

STM32中断线与IO口的对应 

 

  • 每个IO口都可以对应作为中断,几个IO口为一组映射到一个中断线上
  • 在同一时间,同一组中,只能有一个IO口映射到中断线

例:PB0 与 PA0 不可映射到同一中断线

STM32 中断服务函数 

外部中断与中断服务函数的对应

注:上面是正点原子图,少一个EXTI0 

IO口外部中断只有7个中断服务函数

  • EXTI0~EXTI4 分别对应一个中断服务函数
  • EXTI5~EXTI9 对应一个中断服务函数 
  • EXTI10~EXTI15 对应一个中断服务函数

 中断服务函数列表 

  • EXTI0_IRQHandler          
  • EXTI1_IRQHandler
  • EXTI2_IRQHandler          
  • EXTI3_IRQHandler          
  • EXTI4_IRQHandler          
  • EXTI9_5_IRQHandler        
  • EXTI15_10_IRQHandler 

STM32外部中断程序编写

常用的库函数

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
//设置IO口与中断线的映射关系

exp:  GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);


/******EXTI_Init函数******/

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
 //初始化中断线:触发方式等

typedef struct
{
  uint32_t EXTI_Line;   //指定要配置的中断线           
  EXTIMode_TypeDef EXTI_Mode;   //模式:事件 OR中断
  EXTITrigger_TypeDef EXTI_Trigger;//触发方式:上升沿/下降沿/双沿触发
  FunctionalState EXTI_LineCmd;  //使能 OR失能
}EXTI_InitTypeDef;

EXTI_InitStructure.EXTI_Line=EXTI_Line2;	 
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);	

/***********************/


ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位

外部中断的一般配置步骤 

/*初始化IO口为输入*/
GPIO_Init();
/****************/


/*开启IO口复用时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/****************/

/*设置IO口与中断线的映射关系*/
void GPIO_EXTILineConfig();
/***************/

/*初始化线上中断,设置触发条件等*/
EXTI_Init();
/***************/

/*配置中断分组(NVIC),并使能中断*/
NVIC_Init();
/***************/

/*编写中断服务函数*/
EXTIx_IRQHandler();
/***************/

/*清除中断标志位*/
EXTI_ClearITPendingBit();
/***************/

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

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

相关文章

【ArcGIS微课1000例】0058:波段合成(CompositeBands)工具的使用

波段合成工具常见于遥感软件,例如Envi和Erdas等,用于将多个单波段数据合成为一个多波段数据集,在ArcGIS中也提供了波段合成的工具,使用灵活方便。 文章目录 一、波段合成工具介绍二、波段合成工具案例1. 输出Esri Grid格式2. 输出tif格式3. 输出jgp格式4. 输出其它格式一、…

sqlite 使用distinct时组合索引可能不是你想的那样

目录先来唠唠嗑吧~那一探究竟吧!表结构及索引信息我的查询场景到底命中什么索引了?简单小结下~先来唠唠嗑吧~ 在使用sqlite作为词条数据库查询数据,发现有的sql执行很快,有的sql执行很慢,你以为是没有走索引吗&#x…

深入浅出进程控制

文章目录进程控制浅谈fork写时拷贝fork调用失败的原因进程终止进程退出的场景进程常见退出方法查看进程退出码echo $? :查看进程退出码exit和_exit进程等待进程等待的方法waitwaitpid获取子进程status宏定义查看进程是否正常退出,查看退出码再谈僵尸进程浅谈阻塞等…

基于.Net Core开发的支付SDK,简化支付功能开发

更多开源项目请查看:一个专注推荐.Net开源项目的榜单 在我们做项目中,不管是电商系统、外卖系统、还是上门维修系统等等,都需要支付功能,这就需要我们与第三方支付平台进行对接,但是第三方平台文档,往往都存…

05语法分析——自下而上分析

文章目录一、自下而上分析基本问题二、算符优先分析构造FIRSTVT(P)的算法构造LASTVT(P)的算法构造优先表的算法三、LR分析法1.LR(0)构造LR(0)项目集规范族构造识别活前缀的DFA构造LR(0)分析表2.SLRSLR解决冲突办法SLR(1)分析表的构造算法3.LR(1)【规范LR】LR(1)项目集I的闭包状…

【MySQL基础】运算符及相关函数详解

序号系列文章3【MySQL基础】MySQL基本数据类型4【MySQL基础】MySQL表的七大约束5【MySQL基础】字符集与校对集详解6【MySQL基础】MySQL单表操作详解文章目录前言MySQL运算符1,算术运算符1.1,算术运算符的基本使用1.2,常用数学函数的基本使用2…

iOS:OpenGLES 实验室之2D篇 第一弹 の 智能弹幕

本文字数:3046字预计阅读时间:15 分钟iOS:OpenGLES 实验室之2D篇 第一弹 の 智能弹幕笔者之前发表的音视频文章,有图像的处理,音频的重采样等等,都属于入门级别。通过阅读它们,读者能对音视频有…

【复习 自用】JavaScript知识汇总(DOM)

注:之前学过JavaScript,本贴仅用于复习(自用),建议没基础的朋友先学基础。会混入typescript! 更新中~~~~~ Dom核心内容 创建节点 ① document.write() 是直接将内容写入页面的内容流,但是文档流执行完毕&#xff0c…

云原生技能树-docker caontainer 操作

运行 一个Docker镜像(image)运行后,就是一个容器实例,称为container 以镜像hello-world为例,启动容器: docker container run -it hello-world 可以看到输出了Hello World 信息: 以下描述错误的是? 答…

数字逻辑理论——从卡诺图到门电路

卡诺图化简 卡诺图化简 第一步:在卡诺图中圈出相邻为1的小方格(方格的个数为2m2^{m}2m),圈里面的1越多越好,并且这个小方格可以重复使用。 第二步:上一步中的方格或者圈出来的方框——每一个都代表一个与…

Linux软件安装及管理程序

Linux安装及管理程序Linux软件安装及管理程序一、Linux应用程序基础二、RPM软件包管理工具2.1、RPM介绍2.2、RPM命令三、源码编译安装四、yum安装Linux软件安装及管理程序 一、Linux应用程序基础 应用程序与系统命令的关系 角色系统命令应用程序文件位置般在/bin和/sbin目录…

linux系统中实现智能家居的基本方法

大家好,今天主要和大家分享一下,智能家居物联网的基本实现与操作方法。 目录 第一:智能家居基本简介 第二:测试WIFI模块功能 第三:智能家居物联UI界面开发 第四:核心代码的具体实现 第五:最…

【阅读笔记】《重构》 第三四章

第三章 代码的味道 DuplicatedCode(重复代码) 同一个类的两个函数含有相同的表达式两个互为兄弟的子类含有相同表达式两个毫不相干的类出现重复代码 LongMethod(过长函数) 函数不宜过长,函数越长越难理解如果想利用单个类做太多事情,其内往往就会出现…

联合证券|港股再融资“春江水暖” 资本争购热门赛道企业

进入2023年,港股再融资商场有所回暖。到1月18日,已有27家港股上市公司发布拟配售股份(简称“配股”)再融资,募资总额164.01亿港元,较上一年同期增加148.16%。其间,微盟集团的配股再融资吸引了众…

fpga实操训练(lcd测试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们测试过vga输出,当时是找了一个老式的显示器来完成的,也就是本身自带vga接口的显示器。但是,现在市面上大部分显示器都是默认支持hdmi接口的。所以说,如果真的想用fpga测…

都说InnoDB好,那还要不要使用Memory引擎?

我在上一篇文章末尾留给你的问题是:两个 group by 语句都用了 order by null,为什么使用内存临时表得到的语句结果里,0 这个值在最后一行;而使用磁盘临时表得到的结果里,0 这个值在第一行? 今天我们就来看看,出现这个问题的原因吧。 内存表的数据组织结构 为了便于分…

如何在SpringBoot项目中访问静态资源

在springboot项目中如果要在不集成templates的情况下访问静态资源需要做以下配置 1.在项目的application.yml文件中做如下配置 spring:profiles:active: devmvc:view:prefix: /suffix: .html 重点在 配置后生成为WebMvcProperties 配置类。该配置类中有一个内部类View Conf…

各式各样图标的特点

笔者近期在翻看各种样式的图标,逛了下 Iconfont、IconFinder 等图标网站,现根据自己的经验,总结了一些图标特点的描述用语 线性/面性/线面组合平面/立体无层次感(或阴影)/有层次感(或阴影)无填…

Oracle强制加了hint实效三种连接方式使用场合判断

开发写了一个语句使用了connect by level函数 SELECT DISTINCT CTMID FROM ( SELECT CTMID, REGEXP_SUBSTR(FLTUSERIDSTR, ‘[^;]’, 1, l) AS userid FROM s_userinfo,(SELECT LEVEL l FROM DUAL CONNECT BY LEVEL<300) b WHERE l < LENGTH(FLTUSERIDSTR) - LENGTH(rege…

链表的算法题

目录 题型一、克隆含有rand指针的链表 笔试&#xff1a;哈希表 面试&#xff1a;不用容器&#xff0c;模拟哈希表的功能 题型二、给一个单链表头节点Head&#xff0c;判断是否构成回文 题型三、将单链表按某值划分为左边小&#xff0c;中间相等&#xff0c;右边大 6个变量…