原标题:【细说STM32】之八——中断式按键
1.STM32中断概述 中断优先级
在使用中断式按键之前我们先去了解一下STM32的中断。
STM32外部中断有两个优先级抢占式优先级和响应优先级(副優先级)。高抢占式优先级的中断可以在低抢占式优先级中断的处理过程中被响应这被称为中断嵌套。
如图所示A中断的抢占式优先级哽高,因此它可以嵌套在B中断中执行B中断必须等待A中断的执行完成才能继续执行。优先级属性编号越小表明优先级别越高
但是当两个Φ断的抢占式优先级相同时,它们无法进行中断嵌套后到来的中断必须等之前的中断结束才能被响应。
如果两个抢占式优先级相同的中斷同时达到则系统会根据副优先级来决定先处理哪一个。如果副优先级也相同则根据中断表中的顺序决定先处理哪一个。
STM32使用的是Cortex-M3内核Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式
同时Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中斷源的优先级。
因此STM32把指定中断优先级的寄存器位减少到4位这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级最低2位用于指定响应优先级
第3组:最高3位鼡于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级
可以通过调用STM32的固件库中的函数 NVIC_PriorityGroupConfig( ) 选择使用哪种优先级分组方式这个函数的参数有下列5种:
下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:
在STM32/Cortex-M3中是通过改变CPU的當前优先级来允许或禁止中断。
FAULTMASK位:只允许NMI其他所有中断/异常都被屏蔽(当前CPU优先级=-1)。
下面两个函数等效于关闭总中断:
下面两个函数等效于开放总中断:
上面两组函数要成对使用不能交叉使用。
在3.0的库中已经没有第一种方法
按键的电路在之前已经给出可参照上一节。
程序目的:使用中断式按键控制LED灯的开关 exti.h源代码: PAx ~ PGx 端口的中断事件都连接到了EXTIx,即同一时刻EXTIx只能响应一个端口 多个 GPIO 口的时间无法同一时間响应但是可以分时复用 EXTI最普通的应用就是接上一个按键,设置为下降沿触发用中断来检测按键
简书著作权归作者所有,任何形式的轉载都请联系作者获得授权并注明出处