首页 - 通讯 - stm32中断优先级分组(stm32中断优先级分组是)

stm32中断优先级分组(stm32中断优先级分组是)

2023-10-04 09:33

stm32中断优先级分组(stm32中断优先级分组是)

中断优先级组0和组2的区别

?中断,其中包括16个核心中断和240个外部中断,并有256级可编程中断设置。
STM32 并未使用全部 CM3 内核,而仅使用其中的一部分。
STM32有84个中断,其中16个核心中断和68个可屏蔽中断,具有16级可编程中断优先级。我们常用的就是这68个可屏蔽中断
STM32的68个可屏蔽中断。在STM32F103系列上,只有60个(107系列上只有68个)
中断优先级管理方式:
1.1 中断优先级分组:
组STM32,分为0到4。同时,为每个中断设置响应优先级和抢占优先级值
在此处插入图片说明
使用寄存器的三位来配置分组,位8至10。有四位用于分配抢占优先级和响应优先级。值越小,优先级越高
1.2 抢占优先级与对应优先级的区别
高优先级抢占优先级可以中断当前进程 低抢占优先级中断执行。
抢占具有相同优先级的中断。高响应优先级不能打断低响应优先级的中断。
抢占具有相同优先级的中断。当两个中断同时发生时,优先级较高的响应将先被执行。
如果两个中断的抢占优先级和响应优先级相同,则先发生哪个中断先执行;
举例:
假设中断优先级组设置为2,然后将中断3(RCT中断)的抢占优先级设置为2,响应优先级设置为1。 中断6(RCT中断)的抢占优先级设置为1外部中断0)为3,响应优先级为0。中断7(外部中断1)的抢占优先级为2,响应优先级为0。
则这三个中断的优先级顺序为:中断7>中断3>中断6。
特别说明:
一般情况下,系统代码执行过程中,中断优先级组只设置一次,如组2。一旦设置了分组,一般会进行分组不被改变。随意改变分组会导致终端管理混乱和节目结果意外。
1.3 进程:
1 中断优先级分组函数:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{
/* 检查参数 */
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
/* 根据 NVIC_PriorityGroup 值设置 PRIGROUP[10:8] 位 */
SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
因为有五个组,所以:
NVIC_PRIORITY_GROUP(GROUP))
(((GROUP) == NVIC_PriorityGroup_0) )
((GROUP) ) == NVIC_PriorityGroup_1))
((GROUP) == NVIC_PriorityGroup_2))
((GROUP) == NVIC_PriorityGroup_3))
((GROUP) == NVIC_PriorityGroup_4))
2 中断优先级设置 :
通过设置进行配置寄存器:
在此插入图片说明
中断优先级控制寄存器组:IP[240]
240 个 8 位寄存器,每个中断由一个寄存器优先级决定。
STM32F10系列共有60个可屏蔽中断,使用IP[0]到IP[59]。
每个IP寄存器的高四位用于设置抢占优先级和响应优先级,低四位用于设置抢占优先级和响应优先级。四位到达是没用的。 ? uint8_t NVIC_IRQChannelPreemptionPriority;//设置响应优先级
uint8_t NVIC_IRQChannelSubPriority;//设置抢占优先级
FunctionalState NVIC_IRQChannelCmd;//启用
} NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级为1;
NVIC_InitStructure.NVIC _IRQChannelSubPriority=2;//响应优先级位为2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABlE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure);//根据参数初始化NVIC寄存器上面指定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

stm32中断优先级分组,一部电影的中断是否只能集中到一组(组0-4),然后【见补充】

不会,第一次分组只是按照类型划分各级中断,第二次继续划分优先级。例如国防部>外交部>教育部分组;外交部亚洲司>欧洲司>非洲司。 问题

老板,你明白我问的是什么吗?所有 60 个中断均可用,并且它们只能属于组 0-4。只有在一个组内才能指定每个中断的抢占优先级和响应优先级。 60个中断可以分为两组或多组吗? ? ? ?

进一步回答

是的,为什么不呢?我用的STM32F10VE103 Fire Ox版本可以做到

跟进

举个例子。一个芯片被分为两个不同的组,每个组可以指定自己的抢占优先级和响应优先级。不好意思,奖励你50。

如何理解STM32中断中设置的抢占优先级和从机优先级?

(1)抢占式优先级即所谓抢占式优先级。比如一个设置为0,另一个设置为2,2执行的时候中断,如果0来了,2就会暂停,0会立即执行。

(2) 从机优先级是设置中断的执行顺序。当有两个中断到来时,优先级高的会被执行。但是,相同从属优先级具有不同抢占优先级时,不能抢占该从属优先级。低的。

STM32中如何选择中断优先级分组

选择中断分组就是选择分别用于表示抢占优先级和子优先级的位数,即用多少位表示抢占优先级,用多少位表示子优先级(总共8个用于表示优先级位,不同的组导致分配给两个优先级的位数不同)。一般来说,如果您的应用中优先级不多,建议选择组0和组1。您可以阅读下面的详细信息。 《Cortex-M3 权威指南》宋焱老师翻译的书,我个人觉得相当不错~*_*

为什么有些中断不需要设置优先级?另外,优先级组 0、1​​ 和 2 对优先级没有影响,对吗?难道只和他们的抢占优先级和子优先级有关吗?

后续

对于同一优先级,先到先得,中断响应的顺序对你程序的功能没有影响,所以不需要设置它们的优先级。值越小,优先响应。只要你选择的组(比如组1和组2)足以代表你想要分类的优先级数量(假设你只有两个中断),那么你选择哪个组对优先级没有影响* _ *,只取决于你分配的优先级大小~

以上就是小编对stm32中断优先级分组(stm32中断优先级分组是)及相关问题的解答。我希望它对你有用!