打印

麻烦哪位解释一下STM32的优先级

[复制链接]
6608|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不知道这两个优先级是什么意思,有什么区别
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
  NVIC_InitStructure.NVIC_IRQChannelSubPriority
  在手册中,没有提到如何设置优先级,还是我没找到?
沙发
益友电子| | 2012-3-27 08:52 | 只看该作者
我也在等着答案呢,希望各位给解答一下!

使用特权

评论回复
板凳
lost1421| | 2012-3-27 10:05 | 只看该作者
好像以前在这个版里见过答案,我不用STM32,记不得了,楼主搜一下吧。

使用特权

评论回复
地板
qqfishboy| | 2012-3-29 17:26 | 只看该作者
我也在等答案呢

使用特权

评论回复
5
香水城| | 2012-3-29 17:28 | 只看该作者
守株待兔? 不怕饿死?

使用特权

评论回复
6
qqfishboy| | 2012-3-29 17:31 | 只看该作者
查到了pheavecn写的:
NVIC_IRQChannelPreemptionPriority表示“抢断”优先级,该值小的中断在值大的中断处理时,可以“抢”而“断”之。
而如果有两个PreemptionPriority相同的中断被悬挂,NVIC就根据SubPriority来选择先响应哪个中断;就是说SubPriority只在这一刻起作用。

使用特权

评论回复
7
acgean| | 2012-3-30 08:37 | 只看该作者
嗯, 是个令人郁闷的事情, RM0008 所有的章节都说得挺清楚的, 就是这个 NVIC 部分不讲。
虽说这是内核,但在编程角度来看,算足外围比较好,因为真正的内核部分, 我们写程序关注得极少, 但这个 NVIC 却必须关心。能够放在一个手册里多好!

使用特权

评论回复
8
香水城| | 2012-3-30 10:06 | 只看该作者
嗯, 是个令人郁闷的事情, RM0008 所有的章节都说得挺清楚的, 就是这个 NVIC 部分不讲。
虽说这是内核,但在编程角度来看,算足外围比较好,因为真正的内核部分, 我们写程序关注得极少, 但这个 NVIC 却必须关心 ...
acgean 发表于 2012-3-30 08:37


RM0008中不但没有讲NVIC,整个CPU的程序员模型都没有讲,包括总线结构、CPU寄存器、异常、堆栈、存储器、大小端等很多内容,还包括Systick、MPU等,所有这些都在另一个手册:PM0056 http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00228163.pdf

使用特权

评论回复
9
acgean| | 2012-3-30 11:52 | 只看该作者
本帖最后由 acgean 于 2012-3-30 11:54 编辑

就是。
    对于应用, 整个CPU的模型,包括总线结构、CPU寄存器、异常、堆栈、存储器、大小端、MPU等内容,我们用 C 编程时基本很少涉及。
    但是对于 NVIC 以及 Systick 却基本都要涉及,这块部分更接近外设。

使用特权

评论回复
10
xiahouzuoxin| | 2012-3-30 16:26 | 只看该作者
(1)一个是父优先级,一个是子优先级
(2)所有的父优先级都比子优先级的优先级高
(3)STM32中用NVIC_PriorityGroupConfig库函数可以设置优先级分组,中断分组一般在BSP初始化时完成,程序往后执行过程中一般不会再更改。优先级分组有4种,具体看手册
NVIC_PriorityGroup_1
NVIC_PriorityGroup_2
NVIC_PriorityGroup_3
NVIC_PriorityGroup_4
比如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断分组,抢断优先级和顺序优先级都配置成0~4
(4)在进行优先级比较时,先比较父优先级,再比较子优先级
比如一下2组配置:
(a)    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //父优先级=1
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级=1
(b)    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //子优先级=2
由于(a)组中父优先级与(b)组中父优先级相同,所以接着比较子优先级,数字越低优先级越高,所以(a)组优先级配置比(b)组高

使用特权

评论回复
11
xiahouzuoxin| | 2012-3-30 16:26 | 只看该作者
(1)一个是父优先级,一个是子优先级
(2)所有的父优先级都比子优先级的优先级高
(3)STM32中用NVIC_PriorityGroupConfig库函数可以设置优先级分组,中断分组一般在BSP初始化时完成,程序往后执行过程中一般不会再更改。优先级分组有4种,具体看手册
NVIC_PriorityGroup_1
NVIC_PriorityGroup_2
NVIC_PriorityGroup_3
NVIC_PriorityGroup_4
比如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断分组,抢断优先级和顺序优先级都配置成0~4
(4)在进行优先级比较时,先比较父优先级,再比较子优先级
比如一下2组配置:
(a)    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //父优先级=1
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级=1
(b)    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //子优先级=2
由于(a)组中父优先级与(b)组中父优先级相同,所以接着比较子优先级,数字越低优先级越高,所以(a)组优先级配置比(b)组高

使用特权

评论回复
12
eemyicworld| | 2013-8-16 12:28 | 只看该作者
楼上正解.

使用特权

评论回复
13
Super_| | 2013-9-12 08:46 | 只看该作者
有用到。

使用特权

评论回复
14
multisensor| | 2014-10-7 16:17 | 只看该作者
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

使用特权

评论回复
15
huangfeng33| | 2014-10-9 15:30 | 只看该作者

前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGroup_1>NVIC_PriorityGroup_2>NVIC_PriorityGroup_3>NVIC_PriorityGroup_4
前提条件2:“组”优先级别>“抢”占优先级别>“副”优先级别
前提条件3:同一组优先级别中,不同的抢占级别之间,其中一抢占级别正在做事,另外抢占级别不能打断他;(即”同一组优先级下的中断源间,没有中断嵌套“)
前提条件4:不同组优先级别间,依据优先级强弱,优先级别高的组的中断源可以打断优先级别低的组的正在做的事情;(即:不同组优先级间,可以中断嵌套)

使用特权

评论回复
16
bear1| | 2014-12-3 14:50 | 只看该作者
multisensor 发表于 2014-10-7 16:17
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或' ...

“如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。”

这个“中断表中的排位顺序”在哪里能看到?
谢谢!

使用特权

评论回复
17
bear1| | 2014-12-3 14:52 | 只看该作者
huangfeng33 发表于 2014-10-9 15:30
前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0>NVIC_PriorityGrou ...

(即”同一组优先级下的中断源间,没有中断嵌套“)
这个理解好像不对吧?
同一组,父优先级不同,是可以中断嵌套的。

大家觉得呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

174

主题

420

帖子

1

粉丝