云计算百科
云计算领域专业知识百科平台

stm32 中断(理论)

1 数据传输方式(处理器和外部设备)

(1)无条件传输:处理器不必了解外部设备状态,直接进行数据传输,用于指示灯和按键等简单设备

(2)查询方式:传输前,一方先查询另一方的状态,若已经准备好就传输,否则就继续查询

(3)中断方式:一方通过申请中断的方式与另一方进行数据传输,收发双方可以并行工作

(4)直接存储器访问:处理器内部建立片内外设和内存之间的数据传输通道,传输过程不需要处理器参与

2.中断基本概念

2.1中断过程

(1)中断发生:当CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理

(2)中断处理:CPU暂停当前的工作,转去处理事件B

(3)中断返回:当CPU将事件B处理完毕后,再回到事件A中被暂停的地方继续处理事件A

2.2 中断的作用

(1)高速匹配

可以解决快速的CPU与慢速的外部设备之间传送数据的矛盾

(2)分时操作

CPU可以分时为多个外部设备服务,提高计算机的利用率

(3)实时响应

CPU能够及时处理应用系统的随机事件,增强系统的实时性

(4)可靠性强

CPU可以处理设备故障及掉电等突发事件,提高系统可靠性

2.3 中断优先级

处理器根据不同中断的重要程序设置不同的优先等级。不同优先级中断的处理原则是:高级中断可以打断低级中断;低级中断不能打断高级中断

2.4中断向量类

(1)中断服务程序

在响应一个特定中断的时候,处理器会执行一个函数,该函数一般称为中断处理程序或者中断服务程序

(2)中断向量

中断服务程序在内存中的入口地址称为中断向量

(3)中断向量表

把系统中所有的中断向量集中起来放到存储器的某一区域内,这个存放中断向量的存储区就叫中断向量表(编号越小优先级越高)

2.5 查找中断向量的过程

(1)编号:计算机系统对每一个中断源进行编号这个号码称为中断类型号

(2)查表:根据中断类型号,到中断向量表中找到对应的表项

(3)执行:取出表项内容,即该中断源对应的中断服务程序地址,进入该程序执行相应操作

2.6 中断响应过程

3.STM32微控制器中断系统

3.1 基本概念

3.1.1 中断与异常

(1)中断

中断是由内核外部产生的,一般由硬件引起,比如外设中断和外部中断等

(2)异常—软件运行报错

异常通常是内核自身产生的,大多是软件引起的,比如除法出错异常、预取值失败等

3.1.2嵌套向量中断控制器(NVIC)

NVIC属于cortex-M内核的组件,管理所有的中断和异常,为中断源分配中断通道(外部中断一般为GPIO)

3.1.3 中断通道(通道有限)

微控制器片内集成了很多外设,对于单个外设而言,它通常具备若干个可以引起中断的中断源,而该外设的所有中断源只能通过指定的中断通道向内核申请中断。

Eg:STM32F411芯片为例,它支持68个中断通道,已经固定分配给相应的片内外设。由于中断源数量较多,而中断通道有限,会出现多个中断源共享同-个中断通道的情况。

3.1.4 中断优先级

NVIC中有一个8位中断优先级寄存器NVIC IPR,理论上可以配置0~255共256级中断.STM32只使用了其中的高4位(16个),并分成抢占优先级和子优先级两组。

多个中断同时提出中断申请时:先比较抢占优先级,抢占优先级高的中断先执行。如果抢占优先级相同,则比较子优先级。二者都相同时,比较中断编号。编号越小,优先级越高(中断编号位于芯片头文件中)。

3.1.5 优先级分组

HAL库初始化函数HAL Init将优先级分组设置为第4组,即有0~15,共16级抢占优先级,没有子优先级。编号越小的优先级越高:0号为最高,15号为最低。

3.2 外部中断控制器(EXIT)

(1)管理23个外部中断线(EXTLLine)

(2)0~15号外部中断线用于由GPIO引脚触发的外部中断,16~22号外部中断线用于RTC闹钟事件、以太网唤醒事件和USB唤醒事件等

(3)当对应GPIO引脚与外部中断线连接后,GPIO引脚才具备外部中断的功能,可以设置外部中断的触发方式

GPIO引脚的外部中断触发方式:上升沿,下降沿,双边沿

3.2.1 引脚分组&中断通道

尾号相同的引脚一组,接入1个外部中断线,同组引脚只能有一个设置为外部中断功能

EXTI0~EXIT4分别具有独立的中断通道;

EXTI5~EXIT9共享同一个中断通道;

EXTI10~EXIT15共享同一个中断通道;

4.中断编程步骤

中断程序的编程步骤:{1-3在STM32CubeMx中完成;4-5在HAL库的接口函数完成}

(1)设置中断触发条件

(2)设置中断优先等级

(3)使能外设中断

(4)清除中断标志

(5)编写中断服务程序

4.1 HAL库对中断的封装处理

(1)统一规定处理各个外设的中断服务程序HAL_PPP_IRQ_Handler (PPP代表外设名称,GPIO)

(2)在中断服务程序HAL PPP IRQHandler完成了中断标志的判断和清除

(3)将中断中需要执行的操作以回调函数的形式提供给用户(由外设初始化、中断、处理完成/出错触发的函数)

4.2 启动文件&中断文件(由CubeMX生成的MDK工程中与中断相关的编程文件)

启动文件(startup_stm32fxxx.s):

(1)该文件存放在MDK-ARM组中。在该文件中,预先为每个中断编写了-个中断服务程序,只是这些中断服务程序都是死循环,目的只是初始化中断向量表;

(2)中断服务程序的属性定义为“weak”。weak属性的函数表示:如果该函数没有在其他文件中定义,则使用该函数;如果用户在其他地方定义了该函数,则使用用户定义的函数。

中断文件(stm32fxxx_it.c):

(1)该文件存放在User组中,用于存放各个中断的中断服务程序

(2)在使用CubeMX软件进行初始化配置时,如果使能了某一个外设的中断功能,那么在生成代码时,相对应的外设中断服务程序,HAL PPP IRQHandler就会自动添加到该文件中,用户只需要在该函数中添加相应的中断处理代码即可

5. 外部中断处理流程

(1)中断跳转跳转到该中断所对应的中断服务程序

(2)执行中断服务程序执行在stm32f4xx it.c中对应的中断服务程序

(3)外部中断通用处理函数判断中断标志井清除,调用外部中断回调函数

(4)执行用户编写的回调函数完成具体的中断任务处理

任务模拟:假设微控制器芯片为STM32F411,设置引脚PC0和PC13为外部中断功能;当引脚PCO或PC13出现脉冲边沿时,将触发外部中断。

外部中断所对应的中断服务程序:

(1)中断跳转跳转到该中断所对应的中断服务程序

(2)执行中断服务程序执行在stm32f4xx it.c中对应的中断服务程序

(3)外部中断通用处理函数判断中断标志井清除,调用外部中断回调函数

(4)执行用户编写的回调函数完成具体的中断任务处理

所有的外部中断服务程序都会调用该回调函数。如果系统中存在多个外部中断时,需要判断是哪一个GPIO引脚触发的本次外部中断。

另外如果用户没有设置回调函数,会跳进系统自带回调函数,没有任何功能只是为了保证程序完整性:

总结流程图:

本文由基础理论到 STM32 实践,覆盖中断的概念、机制、硬件架构及编程流程,重点阐述了 STM32 中断系统的特性与外部中断的处理逻辑

赞(0)
未经允许不得转载:网硕互联帮助中心 » stm32 中断(理论)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!