《嵌入式系统原理与应用》 |(七)中断 知识梳理

 

系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理


 

目录

 

 

 

什么是中断

中断的处理过程、中断向量表

中断的利弊

STM32 中NVIC的中断优先级处理

STM32中段服务函数的作用及其特点

中断相关库函数(中断通道、优先级分组的设置)

外部中断/事件控制器EXTI的特性及其使用方式

volatile关键字的作用,并使用中断举例


 

什么是中断

简而言之,中断就是通知CPU当前有某个事件发生

中断源(中断请求标志位)

  能引发中断的事件。通常,中断源都与外设有关。 每个中断源都有它对应的中断标志位。因此,一般在中断服务程序最后要将对应的中断标志位清零。

中断屏蔽

可以通过设置相应的中断屏蔽位,禁止CPU响应某个中断,从而实现中断屏蔽。

 

中断的处理过程、中断向量表

中断处理过程

STM32中断向量表

STM32F103各个中断对应的中断服务程序的入口地址统一存放在STM32F103的中断向量表中。STM32F103的中断向量表,一般位于其存储器的0地址处

 

中断的利弊

STM32 中NVIC的中断优先级处理

嵌套向量中断控制器NVIC

 NVIC集成在ARM Cortex-M3内核中,与中央处理器核心CM3Core紧密耦合,从而实现低延迟的中断处理高效地处理晚到的较高优先级的中断。

使用4位优先级设置,具有16级可编程异常优先级;

STM32中断优先级(分组)

STM32中断优先级,分为抢占优先级子优先级

STM32微控制器的每个中断源,有4位优先级(ARM Cortex-M3内核定义了8位,STM32微控制器只使用了其中的4位),具有16级可编程异常优先级。

用户可以根据实际应用需求通过编程设定4位优先级中抢占优先级的位数和子优先级的位数。

STM32中段服务函数的作用及其特点

 STM32所有的中断服务函数,在该微控制器所属产品系列的启动代码文件中都有预先定义

 

中断相关库函数(中断通道、优先级分组的设置)

NVIC_DeInit:将NVIC的寄存器恢复为复位启动时的默认值。

NVIC_PriorityGroupConfig:设置优先级分组。

NVIC_Init:根据NVIC_InitStruct中指定的参数初始化NVIC。

设置中断优先级

 /* Configure one bit for preemption priority */

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置中断优先级组

  /* Enable the TIM2_IRQn Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //设置TIM2_IRQn中断通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  // 指定抢占式优先级别,可取0-7

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //子优先级为0

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //IRQ通道使能

  NVIC_Init(&NVIC_InitStructure);  //根据指定的参数初始化VIC寄存器

 

编写对应的中断服务程序

 

外部中断/事件控制器EXTI的特性及其使用方式

STM32F103的通用I/O引脚可以被直接映射为外部中断通道或事件输出,用于产生中断⁄事件请求。如何在通用I/O引脚上产生中断事件请求的呢?答案就是STM32微控制器另一个片上外设——外部中断∕事件控制器EXT

STM32微控制器的外部中断∕事件控制器EXTI,由19根外部输入线19个产生中断事件请求的边沿检测器APB外设接口等部分组成,除EXTI16(PVD输出)、EXTI17(RTC闹钟)和EXTI18(USB唤醒),0-15GPIO引脚相对应。

如果将STM32F103的I/O引脚映射为EXTI的外部中断∕事件输入线,必须将该引脚设置为输入模式

如果使用STM32F103引脚的外部中断∕事件映射功能,必须打开APB2总线上该引脚对应端口时钟以及AFIO功能时钟

EXTI特性

EXTI使用方式(使用GPIO引脚作为外部中断源时)

  1. GPIO引脚时钟打开,工作模式为输入(上拉或下拉)
  2. 要把GPIO和对应的中断线连接起来
  3. 设置中断的优先级

EXTI相关库函数

EXTI_DeInit:将EXTI寄存器恢复为复位时的默认值。

EXTI_Init:根据EXTI_InitStruct中指定的参数初始化EXTI。

EXTI_GetFlagStatus:检查指定的外部中断∕事件线的标志位。

EXTI_ClearFlag:清除指定外部中断∕事件线的标志位。

EXTI_GetITStatus:检查指定的外部中断∕事件线的触发请求发生与否。

EXTI_ClearITPendingBit:清除指定外部中断∕事件线的中断挂起位。

 

volatile关键字的作用,并使用中断举例

中断中的使用

 

 

 

发布了112 篇原创文章 · 获赞 975 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41523096/article/details/103788115