STM32中有两个优先级的概念:抢占式优先级和响应优先级(也叫副优先级)。
他们的特性是:
1:高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中:,即低抢占式优先级的中断可以被高抢占式优先级的中断打断;
2:当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。
3:如果两个具有相同抢占式优先级的中断同时到达,那么系统给先处理高响应优先级的中断;
3:如果两个中断的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
总的来看,它们的级别关系是: 抢占式优先级 > 响应优先级 > 中断表中的排位顺序。只有在上一级优先级相同时下一级优先级才会起作用。
在stm32系统中使用 抢占式优先级(NVIC_IRQChannelPreemptionPriority)和响应优先级(NVIC_IRQChannelSubPriority) 共同构成了一个 中断优先级,每个中断优先级共有4bit数据来表示其使用的抢占优先级和响应优先级,而中断优先级又被分成了四组,每一组使用一种抢占优先级数据位和响应优先级数据位的组合方式。
#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
0 bits for subpriority */
如上述代码,第0组 NVIC_PriorityGroup_0 使用0bits表示抢占式优先级------NVIC_IRQChannelPreemptionPriority无效,4bits表示响应优先级--NVIC_IRQChannelSubPriority值可为0~15。因此,在这一组中的中断没有抢占式优先级,只有响应优先级,它们互相不可打断。
第2组 NVIC_PriorityGroup_2 使用2bits表示抢占优先级------NVIC_IRQChannelPreemptionPriority值可为0~3,使用2bits表示响应优先级NVIC_IRQChannelSubPriority值可为0~3。
无论使用哪一组,其优先级总数(抢占优先级*响应优先级)都是16.
stm32使用NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)来设置使用的中断优先级组。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //使用中断优先级组1 -- 1bit表示抢占优先级,3bits表示响应优先级
// 设置先占优先级0~1,响应优先级0~7
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //选择中断线0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级为 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为 0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能
NVIC_Init(&NVIC_InitStructure);
上一篇:STM32踩坑记录(1):编写代码时遇到STM32无法进入外部中断的原因及解决方法
下一篇:stm32的启动文件--startup_stm32f10x_hd.s
推荐阅读最新更新时间:2024-11-09 11:05
设计资源 培训 开发板 精华推荐
- TAR5S38U 点稳压器(低压差稳压器)的典型应用
- C2845104_LDO方案验证板(C版)
- AD584 引脚可编程精密电压基准的典型应用,适用于低功耗 10 位 CMOS DAC 应用
- LT6656BIDC-2.5、2.5V 电压基准作为微功率稳压器的典型应用
- DC1059A,用于 LTC4416EMS 双电源路径控制器的演示板
- 具有基于分流电阻的直列式电机相电流检测功能的 48V 三相逆变器参考设计
- REF43 +2.5V 精密电流源参考电压的典型应用
- 四足机器人电源走线集成
- 用于工业应用的 LT3973IDD-5 3.3V 降压转换器的典型应用
- AR0134CSSM25SUEAH3-GEVB:1.2 MP Sunex DSL945D 1/3" iBGA CIS HB