NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; // 定时器2中断 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; // 子优先级 NVIC_InitStruct.NVIC_IRQChanne
时间: 2023-06-12 18:06:03 浏览: 189
lCmd = ENABLE; // 使能中断 NVIC_Init(&NVIC_InitStruct); // 初始化NVIC
这段代码是在初始化定时器2的中断优先级和使能中断。其中,NVIC_InitStruct是一个结构体类型的变量,用来存储中断相关的配置信息。NVIC_InitStruct.NVIC_IRQChannel指定了中断通道,这里是定时器2中断。NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority和NVIC_InitStruct.NVIC_IRQChannelSubPriority分别指定了抢占优先级和子优先级,用于确定中断优先级的顺序。最后,NVIC_Init函数用来初始化NVIC,使得中断优先级和使能状态生效。
相关问题
NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel =USART1_IRQn; //串口1 NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =1; NVIC_InitStruct.NVIC_IRQChannelSubPriority =0; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; // 外部中断线0对应的中断向量 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; // 子优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; //子优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); //使能中断 NVIC_InitStruct.NVIC_IRQChannel =EXTI1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =0; NVIC_InitStruct.NVIC_IRQChannelSubPriority=3; NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStruct);
这段代码是针对STM32的中断初始化代码。其中,NVIC代表嵌入式系统中断控制器,NVIC_InitStruct代表中断配置结构体。
首先,这段代码配置了USART1串口的中断,中断优先级为1,子优先级为0。然后,配置了外部中断线0的中断,抢占优先级为0,子优先级为1。接着,配置了TIM2定时器的中断,抢占优先级为0,子优先级为2。最后,配置了外部中断线1的中断,抢占优先级为0,子优先级为3。
通过这些配置,当对应的中断事件触发时,系统会执行对应的中断服务程序,从而实现对应的功能。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&NVIC_InitStructure);
根据给出的代码,首先通过`NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)`函数设置优先级分组为2,即抢占式优先级和响应式优先级各占2位。
然后,通过`NVIC_InitTypeDef`结构体配置中断向量表的相关参数。在这个例子中,`NVIC_InitStructure.NVIC_IRQChannel`被设置为`TIM2_IRQn`,表示将该中断通道配置为TIM2的中断通道。`NVIC_InitStructure.NVIC_IRQChannelCmd`被设置为`ENABLE`,表示使能该中断通道。
`NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority`被设置为2,表示抢占式优先级为2。`NVIC_InitStructure.NVIC_IRQChannelSubPriority`被设置为1,表示响应式优先级为1。
最后,通过调用`NVIC_Init(&NVIC_InitStructure)`函数来应用上述配置,初始化中断向量表。
这段代码的作用是配置TIM2的中断优先级。根据给出的配置,TIM2中断的抢占式优先级为2,响应式优先级为1。在发生TIM2中断时,如果有更高优先级的中断正在执行,则会暂停当前中断而执行更高优先级的中断。
阅读全文
相关推荐















