0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么有些STM32中断没有子优先级?

strongerHuang 来源:strongerHuang 2023-10-17 15:50 次阅读

看到一个交流群在讨论关于【关于STM32中断优先级的话题】,其中就有小伙伴提到:为什么有些STM32中断没有【子优先级】?

比如,有时候你在使用STM32CubeMX配置时,你会发现只有Preemption Priority【抢占优先级】,而没有Sub Priority【次优先级】:

7d0e0e70-6cc1-11ee-939d-92fbcf53809c.png

然而,有时候你会发现又有Sub Priority【次优先级】:

7d157caa-6cc1-11ee-939d-92fbcf53809c.png

这个问题就牵涉到STM32,准确的来说的是 Cortex-M NVIC嵌套向量中断控制器的问题。

下面就展开来说说关于ARM单片机NVIC的内容。

关于Cortex-M的NVIC

NVIC:Nested Vectored Interrupt Controller,嵌套向量中断控制器。

在每个Cortex-M内核中都有这么一个NVIC嵌套向量中断控制器,当MCU使用的内核不同,其中的NVIC也可能不同。

比如,Cortex-M0和Cortex-M3内核中NVIC功能就不同

其中,中断优先级分组功能就不同。

Cortex-M0的NVIC没有优先级分组功能,Cortex-M3、 M4、M7有分组功能。

7d1d290a-6cc1-11ee-939d-92fbcf53809c.jpg  

所以,你在使用STM32CubeMX配置时,M0/M0+内核的STM32是没有【次优先级】那个选项的。

Cortex-M0包含STM32F0、L0、G0等处理器

对底层感兴趣的朋友可以继续往下看。

NVIC寄存器

NVIC寄存器,需查看对应的内核(Cortex-M)手册,在ARM官网能找到( M3也有对应的中文翻译版,大家可以自己网上搜索)。

内核中的寄存器和我们STM32参考手册中寄存器一样,不同的Bit位代表含义不同。

但是,对于NVIC来说,由于包含众多优先级相关配置,寄存器数量相对较多(NVIC寄存器族)。

7d2acdc6-6cc1-11ee-939d-92fbcf53809c.jpg    

拿M3来说,优先级分组的配置,位于NVIC的AIRCR应用程序中断及复位控制寄存器中:

7d32380e-6cc1-11ee-939d-92fbcf53809c.jpg  

中断入口

额外提下一个小伙伴问的问题:为什么外部中断8和9都使用同一个中断?

void EXTI9_5_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line8) != RESET)
  {
    /* 代码 */
    EXTI_ClearITPendingBit(EXTI_Line8);
  }
  if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  {
    /* 代码 */
    EXTI_ClearITPendingBit(EXTI_Line9);
  }
}
我想,这个问题应该不难。好比一个main程序入口,进入之后需要处理很多事情,只是在里面需要区分事件。

很多外设中断,都会使用同一个中断入口,有一个原因:节约中断入口资源分配

像USART发送和接收中断,TIM不同通道捕获中断等。







审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10672

    浏览量

    348768
  • Cortex-M
    +关注

    关注

    2

    文章

    224

    浏览量

    29574
  • ARM单片机
    +关注

    关注

    0

    文章

    44

    浏览量

    9710
  • 中断优先级
    +关注

    关注

    0

    文章

    22

    浏览量

    9268
  • stm32cubemx
    +关注

    关注

    5

    文章

    260

    浏览量

    14448

原文标题:STM32中断没有子优先级?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32中断优先级与相关使用概念

    STM32中断优先级与相关使用概念
    发表于 03-21 17:19

    STM32中断优先级相关概念与使用笔记

    优先级无效102号抢先优先级102号优先级无效113号抢先优先级113号
    发表于 03-09 15:04

    STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断
    发表于 08-22 10:46

    Stm32中断优先级相关概念与使用笔记

    进行说明。 3.68个外部中断(通道)在STM32已经固定的分配给相应的外部设备,每个中断通道都具备自己的中断
    发表于 07-06 06:22

    STM32中断优先级彻底讲解

    看了一早上资料终于把STM32中断优先级搞懂了, 现在与大家分享: 一:综述 STM32 目前支持的中断共为 84 个(16 个内核+68个
    发表于 07-06 03:27

    STM32中断优先级的分配以及中断原则 精选资料分享

    设计,导致实际上支持的优先级数量更少。在STM32只使用了IPR寄存器的高四位,第四位读回都为0。用于表达优先级的这四位又被分组为5组0~4,当配置
    发表于 08-11 09:08

    详解STM32中断优先级

    一:综述 STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 可编程中断优先级 的设置(仅使用
    发表于 08-13 07:08

    STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断一,中断优先级STM32
    发表于 08-16 07:05

    STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断一,中断优先级STM32
    发表于 08-23 07:06

    如何判断STM32中断优先级?有哪些分组?

    如何判断STM32中断优先级?有哪些分组?
    发表于 11-16 08:54

    stm32中断优先级和分组是什么?

    stm32中断优先级和分组是什么?
    发表于 11-16 08:21

    如何去实现stm32中断优先级分组

    stm32中断优先级分组一、抢占优先级和响应优先级STM32
    发表于 01-14 06:49

    探讨一下STM32中断优先级和开关总中断

    STM32中断优先级和开关总中断一,中断优先级STM32
    发表于 01-14 07:43

    STM32中断使用NVIC中断优先级管理

    一、STM32中断使用NVIC 中断优先级管理Nested Vectored Interrupt Controller,嵌套向量中断控制器。
    发表于 01-14 09:01

    STM32中断设置的先占式优先级与从优先级如何理解?

    STM32中断设置的先占式优先级与从优先级如何理解?
    发表于 03-24 17:55