你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于NVIC的问题

[复制链接]
HEnthusiast 提问时间:2019-7-17 11:03 /
最近开始学习STM32,在学习到NVIC这部分的时候,发现有 NVIC_PriorityGroupConfig() 这个优先级分组的函数。
我现在是这么理解的,如果设置为NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  那么NVIC_IRQChannelPreemptionPriority只有一位,即最大设置值为1;
NVIC_IRQChannelSubPriority 有三位,即最大设置值为7?

但是看官方的例程是如图这样设置的。
stm.jpg


是不是这个分组的函数可以不用? 为什么两个优先级的值都达到了0x0f呢?

初学者希望有人能帮忙解答一下,谢谢!!


收藏 评论8 发布时间:2019-7-17 11:03

举报

8个回答
HEnthusiast 回答时间:2019-7-17 16:05:28
有人不 有人不?
HEnthusiast 回答时间:2019-7-18 10:27:08
求解答啊
haocheng996 回答时间:2019-8-31 13:54:59
这个问题推荐你直接看参考手册的中断的寄存器说明,或看看NVIC_Init(&NVIC_InitStructure);这个函数如何把值写进寄存器的,你就明白了
哀歌与世无争 回答时间:2019-9-1 06:48:22
  *     @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority
  *                                4 bits for subpriority
  *     @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority
  *                                3 bits for subpriority
  *     @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority
  *                                2 bits for subpriority
  *     @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority
  *                                1 bits for subpriority
  *     @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
  *                                0 bits for subpriority
中断位数n,最大能设置的值为2^(n)-1,数值越大优先级越低
NVIC_PriorityGroup_1:1位抢占中断,3位子中断,能设置的最大值分别为1和7,这个你说得没错
但是抢占优先级和子优先级都设置成了0x0F不对了,要么NVIC_PriorityGroup_1: 抢占0x0f,子0x00。
要么NVIC_PriorityGroup_4:抢占0x00,子0x0f,
scfor123456 回答时间:2019-9-3 15:48:29
哀歌与世无争 发表于 2019-9-1 06:48
*     @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority
  *                               ...

  /* Configure IT */
  /* (8) Set priority for DMA1_Channel2_3_IRQn */
  /* (9) Enable DMA1_Channel2_3_IRQn */
  NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0); /* (8) */
  NVIC_EnableIRQ(DMA1_Channel2_3_IRQn); /* (9) */       

像我这个DMA中断设置,抢占和响应优先级都是0,如果要设置其他的优先级,怎么改?
哀歌与世无争 回答时间:2019-9-3 16:24:42
scfor123456 发表于 2019-9-3 15:48
/* Configure IT */
  /* (8) Set priority for DMA1_Channel2_3_IRQn */
  /* (9) Enable DMA1_Channe ...

第二个参数就是优先级
NVIC_SetPriority(DMA1_Channel2_3_IRQn, 1);//设置优先级1
NVIC_SetPriority(DMA1_Channel2_3_IRQn, 3);//设置优先级3
scfor123456 回答时间:2019-9-3 16:43:35
哀歌与世无争 发表于 2019-9-3 16:24
第二个参数就是优先级
NVIC_SetPriority(DMA1_Channel2_3_IRQn, 1);//设置优先级1
NVIC_SetPriority(DMA1 ...

不是还分抢先优先级和响应优先级吗
哀歌与世无争 回答时间:2019-9-3 16:59:53
scfor123456 发表于 2019-9-3 16:43
不是还分抢先优先级和响应优先级吗

DMA1_Channel2_3_IRQn我记得是STM32F0里的中断,STM32F0是M0内核,只有4级抢占中断,没有子优先级中断。
如果我搞错了不是F0,那可以用NVIC_Init();中断初始化函数来设置优先级
例如
   NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel= DMA1_Channel7_IRQn;//中断向量
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;//主优先级0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority= 1;//子优先级1
    NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;//使能
    NVIC_Init(&NVIC_InitStructure);//初始化

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版