stm32学习笔记-中断系统

问题引入

问题引入:我们想通过 按键 控制灯亮 ,怎么做

一般做法:轮询

2b轮询例子:
2:吃了吗?B:没吃
2:吃了吗?B:没吃
2:吃了吗?B:吃了
2:吃了吗?B:…

具体做法
1 将GPIO口设为输入模式,
2 不断判断GPIO口的电平状态,从而得到是否按下按键
这样的 方式叫 “轮询”
轮询 有天生的 缺陷:

  1. 浪费CPU时间
  2. 查询GPIO口的状态时,占用总线

有人提出,能不能这样做,按下或弹起的时候,外设主动通知CPU,这就叫中断

1、中断系统概述。

日常中的中断,有更紧急的事情出现要去处理。比如说看电视的时候,电话响了,暂停电视听电话。

1.1 为什么要中断(中断意义)

处理器的中断:在处理器中,中断是一个过程。在处理器正常执行程序时,出现内部/外部紧急事件需要去处理,处理器暂停当前的程序,去处理紧急事件,处理完毕后,返回被打断的程序处继续往下执行。
中断可以提升CPU的处理效率,同时能堆突发事件做出实时的处理。实现程序的并行化,实现嵌入式系统进程之间的切换。

中断不是动不动就用的,在特定的应用场合应用。

中断应用场合:

  • 急的
  • 要求效率的

1.2 中断处理过程

stm32学习笔记-中断系统

i.保护现场

保护现场,寄存器的值压栈。

ii.执行中断

执行中断服务程序,通过中断向量去寻找中断服务程序。

iii.返回现场

恢复现场。

2、STM32中断的体系结构

stm32学习笔记-中断系统
这个NVIC是个重大的创举有着伟大的意义,就像秦朝设立丞相那样减轻的皇帝的负担。

每一个外设(分管部门):外设中的每一个外设都有一个自己的中断开关,内核中的系统定时器等也有自己中断开关。

NVIC(主管家):NVIC专门管理中断的,每一个中断都要在NVIC中挂号(使NVIC监听器中断请求)。NVIC收到外设的中断请求,会将其中断请求发送给内核,内核收到NVIC的中断通知之后,就会去判断时哪个中断发生,然后查找FLASH中断向量表去获取相应的中断处理函数。

举例:
由简单GPIO电平引起的中断,由专门的部件管理中断,这个部件脚EXTI(外部中断管理控制器)。
某个GPIO需要产生中断,由EXTI使能之后,EXTI会把中断的请求,通知给NVIC,NVIC若对其使能,则NVIC把这个中断请求通知给CORTEX_M3,由CORTEX_M3处理中断。

2.1 NVIC 内嵌向量中断控制器。

NVIC的作用

1、快。(男人就是要快!)
快速的运行的产品需要快,如高铁,飞机,导弹等产品。
2、标准化,同一化。
中断服务程序同一了,方便编程人员。

NVIC的主要功能。

i.中断管理。

ii.支持异常及中断向量化处理。

减少中断处理的一个时间。

iii.支持前台中断。

例如:一个中断发生了,另一个更加紧急的中断不久也发生了,可以打断当前中断的处理,去执行紧急程度更改的中断。

2.2 stm32F10x产品的向量表。

stm32学习笔记-中断系统

2.3 stm32所有的I/O都可以配置中断。

2、外部中断控制器EXTI。

3、按键中断实例。

4、串口中断实例。