大家好 怀着激动地心颤抖的手 我又来了!
这是中断向量表。
我们可以看到Reset的优先级很高。
优先级数越小,优先级越高
STM32支持2^8个优先级(8个位来表示优先级 0~255)
M3只支持2^4(高4位)
在F103上,使用这4个bit,组成5组优先级。这五组中,每组分为1个抢占优先级,1个子优先级。
第一个组(组0):是没有抢占优先级(0),4个组全部配置为子优先级(4个bit都是子优先级)。
第二个组(组1):只有一个(1)抢占优先级,3个组配置为子优先级.
剩下的和图中一样。
如果中断抢占优先级相同,不发生抢占行为。
如果有多个挂起的中断具有相同的抢占优先级,则子优先级高的先行,如果子优先级相同,则IRQ 编号小的先行。
根据总结我们总结一下:
1.已经有中断在工作。根据抢占优先级决定,新来的中断打不打断原有中断,打断留发生中断嵌套,不打断就挂起等着。
2.中断都在挂起等待的状态,先按抢占优先级排序,抢占优先级高的先行,抢占优先级相同,就按子优先级排序,子优先级高的先行,子优先级还相同,那就按照IRQ编号小的先行。
所以:抢占优先级>子优先级>IRQ编号
使能中断和失能中断,如果失能则就算有请求,也不能响应。
设置中断悬起位:如果一个外设要发起中断请求的话,他就会把他的这个中断悬起位挂起。
清除中断悬起位:清除。
获取悬起中断的编号
设置优先级的函数
CubeMX讲解
先配置时钟。
后面IO口是几 就是EXTI几
在上下边沿都检测的意思。
点击开启。
在下方写主优先级和子优先级。
通过EXTI线,捕获EXTI线事件,并且去生成中断,在中断中,翻转LED灯的状态,并且清除EXTI中断标志(中断标志要清除,不然一直产生中断)