
1:STM32中断优先级: 01:占先式优先级(pre-emption priority)% x' |6 t* w: U+ d! @5 _+ q 高占先式优先级的中断事件会打断当前的主程序/中断程序运行——抢断式优先响应,俗称中断嵌套。% U/ o. k. q9 }7 i( B% C' D; ` 02:副优先级(subpriority)4 S( D3 Y8 o0 m6 E4 Z$ Z 在占先式优先级相同的情况下,高副优先级的中断优先被响应;1 T; `! g( U4 H" R" t 在占先式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应——非抢断式响应(不能嵌套)。 03:判断中断是否会被响应的依据 首先是占先式优先级,其次是副优先级; 占先式优先级决定是否会有中断嵌套; Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。 8 X& T1 W* T; q. O6 n/ M 2:STM32中断优先级配置! J i5 y5 D) L5 Q 每一个中断都有一个专门的寄存器(Interrupt Priority Registers)来描述该中断的占先式优先级及副优先级。在这个寄存器中STM32使用4个二进制位描述优先级(Cortex-M3定义了8位,但STM32只使用了4位)。4 @7 p: ~3 i" J" m 占先式优先级与副优先级的分配4个描述优先级位有下列5种组合使用方式。“优先级组别”决定如何解释这4位。8 s# p0 f8 a2 @$ G' _: ^2 O6 D 5 v) F- L A( ]& p+ q0 K' d ![]() 7 B8 @$ E0 S/ J, p7 q" S3 i 3:STM32中断优先级配置示例 ![]() 4:STM32总中断控制 void __disable_irq(void) // DisableInterrupts 关总中断 void __enable_irq(void) // EnableInterrupts 开总中断 更多精彩内容请关注微信公众号,一起学习一起进步。 或扫码关注 ![]() + B* o! w6 ~& t; _3 w |