关于STM32 NVIC配置的解释

大部分学习用的开发板在配置各个外设的中断优先级时,习惯在每个外设的初始化文件里都进行NVIC group配置,例如在ADC和Usart都有NVIC的配置如下:

ADC中:

void ADC_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel =ADC1_2_IRQn;     //开启ADC_Channel8中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);   
}

Usart中:

void NVIC_Configuration(void)
{
  /*  结构声明*/
  NVIC_InitTypeDef NVIC_InitStructure;
  /* Configure the NVIC Preemption Priority Bits */  
  /* Configure one bit for preemption priority */
  /* 优先级组 说明了抢占优先级所用的位数,和响应优先级所用的位数   在这里是0, 4 
  0组:  抢占优先级占0位, 响应优先级占4位
  1组:  抢占优先级占1位, 响应优先级占3位
  2组:  抢占优先级占2位, 响应优先级占2位
  3组:  抢占优先级占3位, 响应优先级占1位
  4组:  抢占优先级占4位, 响应优先级占0位  
  */       
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);    


  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;     //设置串口1中断
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;     //抢占优先级 0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级为0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
  NVIC_Init(&NVIC_InitStructure);
}

但实际上这种配置是不合理的,即如果假设两个NVIC配置的中断组不同,如果其中一个外设引用了最后配置中断组允许的优先级之外的值,可能会出现冲突。和老师讨论过后,他认为如果之前初始化的优先级较后面优先级组设置的值不合理,前面的中断可能就不能响应,BUT。。。。。

我实验时发现,无论如何更改这两个优先级配置顺序,貌似对我的程序结果没有影响。

当然老师的建议是在工程中建立systemconfig的文件进行中断优先级组及时钟等的配置,即中断优先级组配置只出现一次,

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于STM32系列的微控制器,NVIC(Nested Vectored Interrupt Controller)是用于管理中断的关键模块。通过配置NVIC,可以设置中断优先级、使能特定中断、清除中断标志等。 以下是配置NVIC的一般步骤: 1. 确定需要配置的中断源。首先,查阅芯片手册或相关文档,了解可用的中断源以及它们的优先级。 2. 设置中断优先级NVIC使用优先级来确定中断优先级的编码方式。可以通过设置SCB(System Control Block)寄存器中的PRIGROUP位来选择分方式。不同的分方式会影响中断优先级编码的位数。 3. 配置中断向量表。在代码中,需要定义中断处理函数,并将其放置在正确的中断向量表位置。在STM32中,中断向量表通常位于代码的起始位置,可以通过编译器选项或链接脚本来指定。 4. 配置中断优先级。使用NVIC模块提供的函数,将中断源与相应的优先级关联起来。通过调用NVIC_SetPriority()函数,可以设置中断源的优先级。 5. 使能中断。通过调用NVIC_EnableIRQ()函数,使能相应的中断源。这样,当中断源触发时,相应的中断处理函数将被调用。 6. 清除中断标志。在中断处理函数中,根据需要清除中断标志。有些中断源会自动清除标志,而其他一些可能需要手动清除。 需要注意的是,具体的配置步骤和函数可能会因使用的STM32系列和开发环境的不同而有所差异。因此,在进行NVIC配置时,请参考相关的芯片手册、参考手册或官方文档,以确保正确配置中断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值