STM32学习笔记---中断系统
一、STM32中断系统概述
1、中断的基本概念
-
处理器中的中断
在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。中断在计算机多任务处理,尤其是即时系统中尤为重要。比如uCOS,FreeRTOS等。 -
意义
中断能提高CPU的效率,同时能对突发事件做出实时处理。实现程序的并行化,实现嵌入式系统进程之间的切换
2、中断处理过程

- 进入中断
处理器自动保存现场到堆栈里
{PC, xPSR, R0-R3, R12, LR}
一旦入栈结束,ISR便可开始执行
晚到的中断会重新取ISR地址,但无需再次保存现场 - 退出中断
中断前的现场被自动从堆栈中恢复
一旦出栈完成,继续执行被中断打断的指令
出栈的过程也可被打断,使得随时可以响应新的中断, 而不再进行 - 现场保存
3、STM32F4中断的体系结构
主要NVIC嵌套向量中断控制器

4、NVIC的主要功能
4.1、中断管理
- Cortex-M4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256
级的可编程中断优先级设置。但 STM32F4 并没有使用 Cortex-M4 内核的全部东西,而是只用了它的一部分。 - Cortex-M4处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。

注:
ISER:使能中断
ICER: 清除中断使能
ISPR: 挂起中断,若中断产生但没有立即执行,它就会被挂起
ICPR:清除挂起,中断处理完成后应该清除挂起,表示已处理
IABR:每个外部中断都有一个活跃状态位,当处理器正在处理时,该位会被置1
IP:用于设置中断的优先级
4.2、中断和异常向量表
- STM32F407中断和异常向量
CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断。STM32F407实际上只使用了10个内部异常和82个外部中断。
当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。 - 向量化处理中断的好处
统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口。从发生异常到异常的处理中间的时间被缩减。

注:中断和异常的区别:
中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序
4.3、嵌套中断
STM32F4中断的优先级:
- 3个固定的优先级,都是负值,不能改变
- 16个可编程优先级,用4个bit位表示
- 优先级越小优先级越高

在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx(在 F407 中,x=0…81)用来配置外部中断的优先级,IPR宽度为 8bit,原则上每个外部中断可配置的优先级为0~255,数值越小,优先级越高。但是绝大多数 CM4芯片都会精简设计,以致实际上支持的优先级数减少,在 F407 中,只使用了高 4bit。
STM32F4中断的优先级分组:
IPR中的4 位,又分为抢占优先级和响应优先级。抢占优先级在前,响应优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组设置来决定。这里简单介绍一下 STM32F4 的中断分组:STM32F4 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。
注意:工程开发中应当首先确定中断优先级分组,之后就不要再做修改了

4.4、中断优先级总结
- 抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。
同一时刻发生的中断,优先处理优先级较高的中断。 - 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
- 抢占优先级相同就看响应优先级,同样数值越小优先级越高。
- 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。如果同时发生则优先处理编号较小的那个。
二、外部中断控制器EXTI
1、外部中断控制器EXTI

- 在 STM32F407中,共有最多 23 中断 / 事件线可用:
- GPIO 口连接到 16 个外部中断 / 事件线

每组编号相同的管脚接入到一个通道
2、系统配置控制器 (SYSCFG)
该器件具有一组配置寄存器。系统配置控制器的主要用途如下:
● 重映射存储器到代码起始区域。
● 管理连接到 GPIO 口的外部中断。
● 管理系统的可靠性特性。
SYSCFG 外部中断配置寄存器 1-4 (SYSCFG_EXTICR1—4)

3、外部中断 / 事件框图

三、按键中断实例
1、按键原理图分析

2、按键中断编程步骤分析
1、使能相应的时钟
2、配置GPIO管脚为中断功能
3、设置中断优先级
4、使能相应的中断
5、实现中断服务程序
3、实例操作
1、将按钮端口配置为外部中断

2、GPIO中断模式配置

3、中断使能

4、导出工程
5、中断服务函数在stm32f4xx_it.c里

6、中断端口配置文件查看

7、调用流程



__weak开头的函数,是弱函数,用户可以自定义


printf重写

主函数不用写,按钮按下,下降沿触发中断,PC指针调用入口函数
四、串口中断实例
1、CubeMx配置
1、串口配置

2、波特率配置

3、使能串口数据中断

2、代码实现
2.1、串口发送中断
调用流程
发送十个数据完成,触发发送中断








2.2、串口接收中断
调用流程
接收两个字符,触发接收中断









本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
