STM32F407ZGT6学习之外部中断

发布者:technology78最新更新时间:2022-08-02 来源: csdn关键字:stm32F407zgt6  外部中断 手机看文章 扫描二维码
随时随地手机看文章

工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2


(一)、概述

STM32外部中断通过检测外部的触发事件(上升沿触发、下降沿触发或边沿触发),触发中断事件实现低延迟的中断处理。


 1、外部中断框架图


由下图可以看出,外部中断的边沿检测器连接输入信号,当“软件中断寄存器”和“中断屏蔽寄存器”打开的时候,当有事件触发时,事件会被送到NVIC中断控制器中触发中断事件。

2、外部中断特性


2.1、中断优先级


中断包含 16 个可编程优先级(使用了 4 位中断优先级),数字越小的优先级等级越高。通过NVIC_PriorityGroupConfig这个函数,把16个可编程优先级分配给抢占优先级和响应优先级


抢占优先级:可以打断其他抢占优先级低的中断,先运行完自身的中断。


响应优先级:在上一个中断运行结束后,如果另外两种中断的抢占优先级相同,则响应优先级高的中断被运行。


2.2 NVIC中断


NVIC中断是内核中断,当外部中断事件被送入内核中时,需要设置内核的NVIC的相应参数,才能进入中断服务函数。


可以参考:https://blog.csdn.net/wuyuzun/article/details/72783152


当发生中断时,程序会根据产生的中断类型,进入不同的中断服务函数执行相应的操作,各外设的中断服务函数名在启动文件中可以查找(例如:STM32F407ZGT6的IAR工程启动startup_stm32f40_41xxx.s),下图是部分中断服务函数名。


在写外设的中断功能的时候,只需要把中断功能封装成一个函数,函数名是对应的中断函数名字,当软件要执行外设的中断功能时,就会执行该函数(举例:比如外部中断0的中断函数名是"EXTI0_IRQHandler",我们只需要写一个”void EXTI0_IRQHandler(void)“的函数,当外部中断0发生时,程序会进”EXTI0_IRQHandler“这个函数执行相应的操作)。

2.3、中断的触发事件


    外部中断/事件控制器包含多达 23 个用于产生事件/中断请求的边沿检测器,其中0~15号外部中断连接这每组GPIO的一个引脚,不同组GPIO的同一号引脚连接同一号外部中断(如:GPIOA_Pin2、GPIOB_Pin2都连接在外部中断2)。


3、外部中断寄存器

①EXTI_IMR寄存器使能对应的23个的外部中断


②EXTI_EMR寄存器使能对应的23个事件请求


③EXTI_RTSR触发源的选择,使能之后,当输入源有上升沿信号时,将触发对应的事件


④EXTI_FTSR触发源的选择,使能之后,当输入源有下升沿信号时,将触发对应的事件


⑤SWIER寄存器使能软件中断事件,使能时将会触发对应位置的事件

关键字:stm32F407zgt6  外部中断 引用地址:STM32F407ZGT6学习之外部中断

上一篇:stm32 启动过程 以及中段重定位
下一篇:STM32F407ZGT6学习之DAC

推荐阅读最新更新时间:2024-11-13 11:22

STM32 外部(IO)中断EXTI的应用
a) 目的:跟串口输入类似,不使用中断进行的IO输入效率也很低,而且可以通过EXTI插入按钮事件,本节联系EXTI中断。 b) 初始化函数定义: void EXTI_Configuration(void); //定义IO中断初始化函数 c) 初始化函数调用: EXTI_Configuration();//IO中断初始化函数调用简单应用: d) 初始化函数: void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化结构定义 EXTI_Cle
[单片机]
用51单片同时测温度(DS18B20)和频率(外部中断测)
void main()//主函数 { delay1ms(1000); lcd_init();//液晶显示初始化 init_play(); while(1) { EA=0; //因DS18B20对时序要求高且受中断影响,故先关闭总中断 read_temp();//读取温度 ds1820disp();//显示 CT_init();//定时计数器初始化 EA=1;//开总中断 EX0=1;//允许外部中断 IT0=1;//设置外部中断方式为下降沿触发 P3=0xff; t0=(u
[单片机]
stm32 外部中断库函数实现全程分析
前题:   闭门造车,两周了,经过各种的思考和求问,反复阅读了 M3权威指南 和 stm32不完全手册 的相关章节,以及开发板厂商的实验例程,对stm32这块中断终有所悟,是以记之。   至于中断的什么优先级,什么优先级分组,使能之类的原理,就不再赘述。这里主要是记载以下如何使用中断,以及中断配置函数的实现过程,其中并叙述我曾经的疑惑和感悟。   我的开发板里的中断例程是用按键控制一个灯亮和灭的两个状态。   这个例程的实现过程如下描述: 第一步,将一个I/O口配置成中断输入模式。      这里需要注意的是,GPIO本身是没有中断功能神马的。如果硬要使他产生中断输入方式,就得将相应的端口映射到相应的外部事件上去。而
[单片机]
stm32 <font color='red'>外部中断</font>库函数实现全程分析
第二节: 外部中断学习(用CubeMX学习STM32)
前言: 关于中断简单介绍 中断的流程: 中断流程图: 中断方式传送数据具有可以有效提高单片机工作效率, 适合于实时控制系统等优点, 相对于查询方式更为常用。 当CPU处理某件事情的时候, 外部发生的某一事件(如电平的改变、脉冲边沿跳变、定时器/计数器溢出等)请求CPU迅速处理, 于是CPU暂时中断当前的工作, 转去处理发生的事件。 处理完该事件后, 再回到原来中断处, 继续工作。 这样的过程称为中断 上图为中断流程图 这个中断的概念是不是有点晦涩难懂? 主要是这个是书上的内容, 所以不是很形象. 我再解释一遍:想象一个场景, 1、当有一天你正在和川建国同志吃饭(你和他吃饭这个事情就是主程序); 2、突然有个电话打给
[单片机]
第二节: <font color='red'>外部中断</font>学习(用CubeMX学习STM32)
51单片机实验——按键外部中断实现四进制计数器
1.实验题目: 设计一个通过触发外部中断INT1实现的在0-3之间计数(四进制)的计数器,并通过P1.6和P1.7端口上的LED,显示计数的值。 2.KEIL代码 #include reg51.h sbit P16=P1^6; sbit P17=P1^7; void INT1_Init();//声明中断初始化函数 void main() { INT1_Init();//调用中断初始化函数 while(1); } void INT1_Init() //编写中断初始化函数 { EA=1;//开启中断总开关 EX1=1;//开启外部中断1 IT1=1;//设定为下降沿触发 IE1=0;//清
[单片机]
51单片机实验——按键<font color='red'>外部中断</font>实现四进制计数器
STM32L0xx_Hal_Driver库的使用--EXTI
单片机型号:STM32L051C8T6 开发环境MDK5.12 库版本:STM32L0xx_HAL_Driver V1.1.0 主机环境:Windows XP 之前碰到的串口问题还没解决,现在在学习EXTI时又遇到了新的问题。。。很是无语 在编写EXTI时因为需求特殊需要统计一些IO口的信号频率,信号分为两大类共3种,Oscillator信号其频率在256HZ左右,M+和M-信号比较特殊其在2S之内会有26个左右的波峰,因此对其信号的统计是统计2S,Oscillator是统计1S。管脚分配如下 参考库中EXTI的例程,编辑代码,先统计Oscillator信号,再统计M+信号,最后统计M-信号。在主循环中输出
[单片机]
STM32L0xx_Hal_Driver库的使用--<font color='red'>EXTI</font>
STM8-利用外部中断编写一个按键控制灯的亮灭
目的:熟悉外部中断的使用。(一个按键控制灯的亮灭) #include stm8s.h #include stm8s_exti.h #define uchar unsigned char #define uint unsigned int #define ulong unsigned long void delay(uint i) { while(i--); } void main() { GPIO_DeInit(GPIOD); GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);//输出 GPIO_DeInit(GPIOB); GPIO_Init
[单片机]
STM32库函数EXTI_GetFlagStatus和EXTI_GetITStatus区别是什么?
一个是获取状态的,一个是获取中断的。 EXTI_GetFlagStatus只是纯粹读取中断标志位的状态,但是不一定会响应中断(EXT_IMR寄存器对该中断进行屏蔽);而EXTI_GetITStatus除了读取中断标志位,还查看EXT_IMR寄存器是否对该中断进行屏蔽,在中断挂起&没有屏蔽的情况下就会响应中断。仔细看看代码就知道区别了 FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) { FlagStatus bitstatus = RESET; assert_param(IS_GET_EXTI_LINE(EXTI_Line)); if ((EXTI- PR & EXTI_
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved