f4 stm32 中断

前言
中断是什么?什么是中断?
在学习 51 单片机时,我们就接触过中断,中断其实就是当 CPU 执行程序时,由于发生了某种随机的事件(外部或内部),引起 CPU 暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程就称为中断,引发中断地称为中断源 。比如:看电视时突然电话响了,那么电话响就相当于中断源 。有些中断还能够被其他高优先级的中断所中断,那么这种情况又叫做中断的嵌套 。
正文
那么我们在学习中断的时候,就会必不可少的会涉及到----嵌套向量中断控制器 (NVIC)和外部中断/事件控制器 (EXTI)
NVIC
NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能 。嵌套向量中断控制器。
数据手册上知道
NVIC 包含以下特性:
● /07xx 和 /17xx 具有 82 个可屏蔽中断通道,和具有多达 86 个可屏蔽中断通道(不包括 ?-M4F 的 16 根中 断线)
● 16 个可编程优先级(使用了 4 位中断优先级)
● 低延迟异常和中断处理
● 电源管理控制
● 系统控制寄存器的实现
嵌套向量中断控制器 (NVIC) 和处理器内核接口紧密配合,可以实现低延迟的中断处理和晚 到中断的高效处理 。
包括内核异常在内的所有中断均通过 NVIC 进行管理 。
在.-M4手册上有对NVIC寄存器的介绍和讲解
在NVIC当中里面重要的两个库文件.h和misc.c文件
在cm4中可以找到关于NVIC相关寄存器即:
在这些寄存器当中最主要的还是优先级的寄存器 。
中断优先级寄存器 (在 F407 中,x=0…981)用来配置外部中断的优先级,IPR 宽度为 8bit,原则上每个外部中断可配置的优先级为0~255,数值越小,优先级越高 。但是绝大多数 CM4 芯片都会精简设计,以致实际上支持的优先级数减少,在F407 中,只使用了高 4bit 。用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级 。如果有多个中断同时响应,抢占
优先级高的就会抢占抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级 。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高 。
void NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//优先级分组为NVIC_PriorityGroup_1
配置:
在我们要配置NVIC的话,最主要的还是void (* )这个函数,这个函数里面初始化结构体:
:用来设置中断源,不同的中断中断源不一样,且不可写错,即使写错了程序不会报错,只会导致不会中断 。
:抢占优先级,具体的值要根据优先级分组来确定 。
:子优先级,具体的值要根据优先级分组来确定 。
:中断使能()或者失能() 。
如下所示:
EXTI
EXTI:外部中断/事件控制器 (EXTI) 管理了控制器的 23 个中断/事件线 。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测 。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性 。EXTI 有 23 个中断/事件线,每个GPIO 都可以被设置为输入线,占用 EXTI0 至 ,还有另外七根用于特定的外设事件 。
功能框图:
EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不同 。首先我们来看图 EXTI 功能框图 中红色虚线指示的电路流程 。它是一个产生中断的线路,最终信号流入到 NVIC 控制器内 。