****************************************************************EXTI之按键中断实验****************************************************************************
1,原理:EXTI就是指外部中断,通过GPIO检测输入脉冲,引起中断事件,打断原来的代码执行流程,进入到中断服务函数中进行处理,处理完后再返回到中断之前的代码中执行。
STM32对Cortex中断向量表重新排列,把优先级编号从-3到6的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,如复位、不可屏蔽中断、硬错误。从编号7开始的为外部中断,这些中断的优先级都是可以自行设置的。对于这些编号的对应内容大家可以自己去查找STM32向量表查看。在实际使用中最好从启动文件中查找,本实验用的启动文件是startup_stm3232f10x_cl.s,在编写中断服务函数时,需要从启动文件中定义的中断向量表中查找中断服务函数名。
STM32中有一个强大而方便的中断控制器NVIC。NVIC是属于Cortex内核的器件,不可屏蔽中断(NMI)和外部中断都由它来处理,而SYSTICK不是由其控制的。对NVIC初始化,首先定义并填充一个NVIC_IbitTypeDef类型的结构体。这个结构体有4个成员:
NVIC_IRQChannel :需要配置的中断向量
NVIC_IRQChannelCmd:使能或者关闭相应中断向量的中断响应
NVIC_IRQChannelPreemptionPriority:配置相应中断向量抢占优先级
NVIC_IRQChannelSubPriority:配置相应中断向量的响应优先级
STM32的中断向量具有两个属性,一个为抢占属性,一个为响应属性,其属性编号越小则优先级越高。抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断。因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级(16种)
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级(8种)
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级(4种)
第3组:最高3位用于指定抢