蓝桥杯嵌入式学习STM32之外部中断EXTI详解
先说点题外话。
!是取逻辑反的意思,
~是按位取反的意思
!0x01=0;
~0x01=1111 1110;
进入正题
基本概念
STM32的每个IO都可以作为外部中断输入。
STM32的中断控制器支持19个外部中断/事件请求:
线0~15:对应外部IO口的输入中断。
线16:连接到PVD输出。
线17:连接到RTC闹钟事件。
线18:连接到USB唤醒事件。
每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。
相同的Pin脚公用一条线。
每条触发线都可以配置属于自己的中断条件。
但是我们只有七个中断向量,也就是说只有7个中断服务函数。
纠错:上图还有一行EXIT0
(麻蛋,5到15不是亲儿子,是垃圾桶里捡的啊
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
以上中断服务函数再启动文件里可以找到。
外部中断常用函数
GPIO.H
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);//设置IO口与中断线的映射关系exp: GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
EXTI.H
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);//初始化中断线:触发方式等
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
//判断中断线中断状态,是否发生
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
//清除中断线上的中断标志位
配置流程
- 初始化IO口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStruct);
- 使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
为什么要使能这个时钟呢?
有以下三种情况要使能这个时钟。
见复用和重映射
这个属于映射到外部中断线。
- 设置中断口和外部中断线关系
实际上就是设置是哪条外部中断线
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
- 设置外部中断线的中断条件
上升沿,下降沿什么的
EXTI_InitTypeDef EXTI_InitStruct;EXTI_InitStruct.EXTI_Line=EXTI_Line4;EXTI_InitStruct.EXTI_LineCmd=ENABLE;EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStruct);
- 中断优先级分组并初始化
分组应该很早就去做了
NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel=EXTI4_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;NVIC_Init(&NVIC_InitStruct);
- 书写中断函数,注意最后要清除中断标志位,不如不会再次进入中断
void EXTI4_IRQHandler()
{delay_ms(10);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
// GPIO_ResetBits(GPIOB,GPIO_Pin_5);
// GPIO_WriteBit(GPIOB,GPIO_Pin_5,!GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5));
// if(EXTI_GetITStatus(EXTI_Line4)==SET)flg++;EXTI_ClearITPendingBit(EXTI_Line4);
}
中断函数心得
因为一线多用,一般来说都要用if语句判断一下具体是什么引起的中断。
这个不建议用甚至是不能用
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);exp:if(EXTI_GetITStatus(EXTI_Line4)==SET)
来判断,因为你能进中断这个肯定是SET的状态,一般是读取端口的电平情况来判断的。
**注:**USART为什么会用到GetITStatus呢?因为一个USART口会有很多情况(比如说接受位满了,发送位空了等等)触发中断,而EXIT外部中断触发中断的情况是唯一的 ”SET"。
蓝桥杯嵌入式学习STM32之外部中断EXTI详解相关推荐
- 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...
- 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善
题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...
- 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
最新文章
- 你还在认为 count(1) 比 count(*) 效率高?
- 【推荐】Redhat 5配置YUM服务器【利用DVD盘做yum源】
- (0068)iOS开发之AutoLayout框架Masonry使用心得
- 【Linux】15.mdc启动网卡并设置其ip和子网掩码
- python3(十)pickle库
- ParameterizedTypeImpl
- 统计文件中有多少个单词amp;c语言实现
- ELF格式解析库之基本数据类型
- PowerPC E500 MMU详解
- js中定义用字符串拼接起来的变量名的变量
- 常见的使用ICMP协议的命令
- matlab广州等温线地形图,MATLAB 画等温线.doc
- SVN创建分支/合并分支/切换分支
- 干货,分享!后台信息管理HTML静态网页模版
- 认识MyBatis、Mybatis笔记.MyBatis的核心配置,动态Mapper,动态SQL,表的关联及分页操作和缓存理解
- jul177链接_「jul177小早川中文」无删减版高清天天影音第89集
- 【编译原理】【实验】THOMPSON 算法的实现
- 将数据库连接地址由localhost改为IP地址后无法访问的解决方法
- 《动手学深度学习》(PyTorch版)代码注释 - 3 【Softmaxs_regression_with_zero】
- 中台战略-第五章、中台建设方法论
热门文章
- (附源码)springboot证书管理系统的设计与实现 毕业设计162317
- pytorch中tensor.mean(axis, keepdim)参数理解小实验
- 评分高的前端书籍推荐(上)—好书知时节
- 数据开发 的 代码规范 以及 代码评审脚本
- 感谢csdn发“笔耕不辍”勋章
- 【小超_U3D】Unity3D对陀螺仪的使用
- Vectorworks 2021 for mac(3D建筑设计软件)
- 信息流造就阿里 物流造就京东
- 服装连锁店铺管理软件大盘点!秦丝、日进斗金、商陆花谁更强?
- Photoshop文字特效——栅格层叠效果文字