微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32 NVIC 中断优先级管理

STM32 NVIC 中断优先级管理

时间:11-11 来源:互联网 点击:

确定就最好不要更改。

比如我们设置整个系统的中断优先级分组值为2(2位抢占优先级,2位响应优先级”),那么方法是:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

设置好了系统中断分组,那么对于每个中断又怎么确定他的抢占优先级和响应优先级呢?下面看一个重要的函数为中断初始化函数NVIC_Init,其函数申明为:

voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)

其中NVIC_InitTypeDef是一个结构体,可以看看结构体的成员变量:

  1.    typedefstruct
  2.    {
  3.      uint8_t NVIC_IRQChannel;//定义初始化的是哪个中断,这个我们可以在 stm32f10x.h 中找到每个中断对应的名字。例如 USART1_IRQn。
  4.      uint8_t NVIC_IRQChannelPreemptionPriority;//定义这个中断的抢占优先级别。
  5.      uint8_t NVIC_IRQChannelSubPriority;//定义这个中断的子优先级别。
  6.      FunctionalState NVIC_IRQChannelCmd;//该中断是否使能。
  7.    }NVIC_InitTypeDef;

比如我们要使能串口1的中断,同时设置抢占优先级为1,子优先级位2,初始化的方法是:

  1.    USART_InitTypeDef USART_InitStructure;
  2.    NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//串口 1 中断
  3.    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;// 抢占优先级为 1
  4.    NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;// 子优先级位 2
  5.    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ 通道使能
  6.    NVIC_Init(&NVIC_InitStructure);


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top