scfor123456 发表于 2019-9-17 15:02:10

M4的中断优先级配置

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

/* 配置NVIC为优先级组1 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//高2位为抢占优先级,低2位为响应优先级


//中断1设置优先级
/* 配置中断源:按键1 */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//配置为EXTI0通道
/* 配置抢占优先级 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 配置子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断通道 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); //将上述配置参数传入中断初始化函数


//中断2设置优先级

/* 配置中断源:DMA1 */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;//配置为DMA1_Channel1_IRQn通道
/* 配置抢占优先级 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
/* 配置子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断通道 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); //将上述配置参数传入中断初始化函数
}


这个设置中,EXTI0中断抢占优先级高于DMA1中断,所以EXTI0会打断DMA1中断,这样的写法对不对?

发表于 2019-9-17 16:26:52

是这样写的。NVIC_IRQChannelPreemptionPriority决定是否抢占。

scfor123456 发表于 2019-9-17 16:36:36

安 发表于 2019-9-17 16:26
是这样写的。NVIC_IRQChannelPreemptionPriority决定是否抢占。

OK:)

scfor123456 发表于 2019-9-17 17:06:02

安 发表于 2019-9-17 16:26
是这样写的。NVIC_IRQChannelPreemptionPriority决定是否抢占。

SysTick_Config(0x01000000);
NVIC_Configuration();
先设置SysTick再设置NVIC会导致SysTick定时中断进不去?

发表于 2019-9-19 09:15:59

先配置NVIC再配置systick,可能是因为NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)这句话导致的。
页: [1]
查看完整版本: M4的中断优先级配置