STM32学习笔记---中断系统

一、STM32中断系统概述

1、中断的基本概念

  • 处理器中的中断
    在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。中断在计算机多任务处理,尤其是即时系统中尤为重要。比如uCOS,FreeRTOS等。

  • 意义
    中断能提高CPU的效率,同时能对突发事件做出实时处理。实现程序的并行化,实现嵌入式系统进程之间的切换

2、中断处理过程

STM32学习笔记---中断系统_第1张图片

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

3、STM32F4中断的体系结构

主要NVIC嵌套向量中断控制器
STM32学习笔记---中断系统_第2张图片

4、NVIC的主要功能

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

STM32学习笔记---中断系统_第3张图片
注:
ISER:使能中断
ICER: 清除中断使能
ISPR: 挂起中断,若中断产生但没有立即执行,它就会被挂起
ICPR:清除挂起,中断处理完成后应该清除挂起,表示已处理
IABR:每个外部中断都有一个活跃状态位,当处理器正在处理时,该位会被置1
IP:用于设置中断的优先级

4.2、中断和异常向量表
  • STM32F407中断和异常向量
    CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断。STM32F407实际上只使用了10个内部异常和82个外部中断。
    当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。
  • 向量化处理中断的好处
    统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口。从发生异常到异常的处理中间的时间被缩减。
    STM32学习笔记---中断系统_第4张图片
    注:中断和异常的区别:
    中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序
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 来定义的。
注意:工程开发中应当首先确定中断优先级分组,之后就不要再做修改了
STM32学习笔记---中断系统_第5张图片

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

二、外部中断控制器EXTI

1、外部中断控制器EXTI

STM32学习笔记---中断系统_第6张图片

  • 在 STM32F407中,共有最多 23 中断 / 事件线可用:
  • GPIO 口连接到 16 个外部中断 / 事件线
    STM32学习笔记---中断系统_第7张图片
    每组编号相同的管脚接入到一个通道

2、系统配置控制器 (SYSCFG)

该器件具有一组配置寄存器。系统配置控制器的主要用途如下:
● 重映射存储器到代码起始区域。
● 管理连接到 GPIO 口的外部中断。
● 管理系统的可靠性特性。

SYSCFG 外部中断配置寄存器 1-4 (SYSCFG_EXTICR1—4)
STM32学习笔记---中断系统_第8张图片

3、外部中断 / 事件框图

STM32学习笔记---中断系统_第9张图片

三、按键中断实例

1、按键原理图分析

STM32学习笔记---中断系统_第10张图片

2、按键中断编程步骤分析

1、使能相应的时钟
2、配置GPIO管脚为中断功能
3、设置中断优先级
4、使能相应的中断
5、实现中断服务程序

3、实例操作

1、将按钮端口配置为外部中断
STM32学习笔记---中断系统_第11张图片
2、GPIO中断模式配置
STM32学习笔记---中断系统_第12张图片
3、中断使能
STM32学习笔记---中断系统_第13张图片
4、导出工程
5、中断服务函数在stm32f4xx_it.c里
STM32学习笔记---中断系统_第14张图片
6、中断端口配置文件查看
STM32学习笔记---中断系统_第15张图片
7、调用流程
STM32学习笔记---中断系统_第16张图片
STM32学习笔记---中断系统_第17张图片

STM32学习笔记---中断系统_第18张图片
__weak开头的函数,是弱函数,用户可以自定义
STM32学习笔记---中断系统_第19张图片
STM32学习笔记---中断系统_第20张图片
printf重写
STM32学习笔记---中断系统_第21张图片
主函数不用写,按钮按下,下降沿触发中断,PC指针调用入口函数

四、串口中断实例

1、CubeMx配置

1、串口配置
STM32学习笔记---中断系统_第22张图片
2、波特率配置
STM32学习笔记---中断系统_第23张图片
3、使能串口数据中断
STM32学习笔记---中断系统_第24张图片

2、代码实现

2.1、串口发送中断

调用流程
发送十个数据完成,触发发送中断
STM32学习笔记---中断系统_第25张图片

STM32学习笔记---中断系统_第26张图片
STM32学习笔记---中断系统_第27张图片
STM32学习笔记---中断系统_第28张图片
STM32学习笔记---中断系统_第29张图片
STM32学习笔记---中断系统_第30张图片
STM32学习笔记---中断系统_第31张图片
STM32学习笔记---中断系统_第32张图片

2.2、串口接收中断

调用流程
接收两个字符,触发接收中断
STM32学习笔记---中断系统_第33张图片
STM32学习笔记---中断系统_第34张图片
STM32学习笔记---中断系统_第35张图片
STM32学习笔记---中断系统_第36张图片
STM32学习笔记---中断系统_第37张图片
STM32学习笔记---中断系统_第38张图片
STM32学习笔记---中断系统_第39张图片
STM32学习笔记---中断系统_第40张图片
STM32学习笔记---中断系统_第41张图片

你可能感兴趣的:(stm32,单片机,arm)