STM32之NVIC理解

原创 2013年12月05日 11:43:03
STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下
#define NVIC_PriorityGroup_0 ((u32)0x700)
#define NVIC_PriorityGroup_1 ((u32)0x600)
#define NVIC_PriorityGroup_2 ((u32)0x500)
#define NVIC_PriorityGroup_3 ((u32)0x400)
#define NVIC_PriorityGroup_4 ((u32)0x300)

每个工程只能有一种分组方式:

NVIC_PriorityGroup_0来分组:抢占优先级为1个,子优先级为16

NVIC_PriorityGroup_1来分组:抢占优先级为2,子优先级为8

NVIC_PriorityGroup_2来分组:抢占优先级为4,子优先级为4

NVIC_PriorityGroup_3来分组:抢占优先级为8,子优先级为2

NVIC_PriorityGroup_0来分组:抢占优先级为16,子优先级为1

抢占优先级高的中断可以打断抢占优先级低的中断;抢占优先级相同时比较响应优先级(子优先级)。

先设定分组方式

例:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);    //NVIC_PriorityGroup_4来分组

此时,有一中断EXTI0_IRQChannel,你指定他为抢占优先级8,则
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 8; // 指定抢占式优先级别,可取0-15

又有1中断SPI1_IRQChannel,设定如下
NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别,可取0-15

SPI1_IRQChannel的抢占优先级高,EXTI0_IRQChannel做事的时候可以打断(嵌套)


又:若分组方式为:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);    //NVIC_PriorityGroup_3来分组

此时就有8个抢占优先级,2个子优先级;

EXTI0_IRQChannel中断,你指定他为抢占优先级3,则:
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 指定抢占式优先级别,可取0-7
还需要指定他的阶层:
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别,可取0-1

又有TIM2_IRQn中断,设定如下:

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;// 指定抢占式优先级别,可取0-7

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 指定响应优先级别,可取0-1

由于抢占优先级相同,响应优先级EXTI0_IRQChannel中断高于TIM2_IRQn中断,所以EXTI0_IRQChannel可以打断TIM2_IRQn;

还有一USB_LP_CAN1_RX0_IRQn,设定如下:

NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;   //CAN1 RX0中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;   //响应优先级别0,可取0-1

USB_LP_CAN1_RX0_IRQn优先级最高,前两中断发生时,它都可以打断。

附:

void NVIC_Config(void)

{       

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);//一个工程中只能使用一种分组方式
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; //CAN1 RX0中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;// 指定抢占式优先级别,可取0-7
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 指定响应优先级别,可取0-1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; // 指定抢占式优先级别,可取0-7
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别,可取0-1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}

stm32中关于NVIC_SetVectorTable函数使用的疑惑与理解

先描述下这几天碰到的一个奇怪的问题: 一个基于stm32的工程中使用到了IAP编程,其中boot空间预留长度为0x6100,实际boot的bin文件大小为21.1KB,具体为21633Byte.我在...

stm32 中断嵌套NVIC的理解

Stm32中断NVIC管理理解   1、中断服务函数入口名称在startup_stm32f10x_hd.s文件中。 2、  中断结构参数NVIC_InitStructure.NVIC_IRQChann...

STM32之NVIC个人理解

绕来绕去终于大概明白了。 STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指...

牛人对STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解

STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个b...
  • Cracent
  • Cracent
  • 2015年12月13日 19:11
  • 1286

牛人对STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解

STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个b...

STM32的NVIC理解

STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个b...

我对STM32F10x NVIC中断优先级的理解

NVIC中断优先级的理解       CM3支持硬件中断嵌套,分为抢占式优先级和亚优先级,使用规则主要有,抢占优先级高级别的可以打断低级别的,同一级别的抢占优先级同时发生时,亚当优先级高的先发生中断...

STM32的优先级NVIC_PriorityGroupConfig的理解及其使用

原文转载:http://blog.csdn.net/yx_l128125/article/details/9703843 写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整...

STM32的NVIC理解

STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个b...

牛人对STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解

STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个b...
  • hbaizj
  • hbaizj
  • 2014年12月02日 13:46
  • 439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32之NVIC理解
举报原因:
原因补充:

(最多只允许输入30个字)