中断应用概述
一、中断简介
STM32中断非常强大,每个外设都可以产生中断。
中断类型:
1》系统异常
体现在内核水平。
系统异常有10个。
2》外部中断
体现在外设水平。
外部中断有82个。
中断优先级:
除了个别的系统异常的优先级被定死外,其它的优先级都是可编程的。
优先级被分组为抢占优先级(主优先级)和子优先级。先比较抢占优先级,抢占优先级高的优先得到执行;如果抢占优先级相同,则比较子优先级,子优先级高的优先得到执行;如果抢占优先级和子优先级都相同的话,就比较它们的硬件中断编号,编号越小,优先级越高。
优先级的分组:
设置优先级的分组可调用库函数NVIC_PriorityGroupConfig()函数实现,有关NVIC中断相关的库函数都在库文件misc.c和misc.h中。
向量表:
二、NVIC简介
NVIC是嵌套向量中断控制器,与内核紧密耦合,是内核里面的一个外设,管理着包括内核和片上所有外设的中断相关的功能。
NVIC初始化结构体:
typedef struct
{
uint8_t NVIC_IRQChannel ; //中断源
uint8_t NVIC_IRQChannelPreemptionPriority ; //抢占优先级
uint8_t NVIC_IRQChannelSubPriority; //子优先级
FunctionalState NVIC_IRQChannelCmd ; //中断使能或失能
}NVIC_InitTypeDef ;
三、中断编程
(1)使能中断请求
(2)配置中断优先级分组(只需配置一次即可)
(3)配置NVIC寄存器,初始化NVIC_InitTypeDef
(4)编写中断服务函数
在启动文件startup_stm32f4xx.s中预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。实际的中断服务函数都需要我们重新编写,中断服务函数我们统一写在stm32f4xx_it.c这个库文件中。
关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口,直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。