STM32:NVIC中断控制器

NVIC(Nested Vectored Interrupt Controller) ,即内嵌向量中断控制器,NVIC位于内核中,响应速度更快,同时标准化,各厂家Cortex内核芯片NVIC都一致。

M4/M7 内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置,实际中各厂家会进行裁剪,支持的中断会少些。如STM32F40x/41x总共有92个中断,10个内核中断,82个可屏蔽中断;STM32F42x/STM32F43x则总共有97个中断,10个内核中断,87个可屏蔽中断;STM32F76x总共118个中断,10个内核中断,108个可屏蔽中断。

如何管理这么多的中断?

STM32对每个中断都设置了两个优先级:抢占式优先级(主优先级)和响应优先级(从优先级)。中断处理优先级原则:先看谁的主优先级高,高的先处理,如果一样高先到先处理,同时到才看从优先级,如果主、从优先级都一样且同时到,则按它们在中断表中的排序先后来决定处理顺序。[注:高抢占优先级的中断可以打断正在进行的低抢占优先级的中断]

stm32对中断进行分组(0~4组),分组是在寄存器SCB->AIRCR中配置,所谓分组就是分主、从优先级各占几位,比如分组为2,则有2位抢占优先级(值取0~4,值越小优先级越高)和2位响应优先级(值取0~4,值越小优先级越高)。

AIRCR[108]

IP bit[74]分配情况

分配结果

0

111

04

0位抢占优先级,4位响应优先级

1

110

13

1位抢占优先级,3位响应优先级

2

101

22

2位抢占优先级,2位响应优先级

3

100

31

3位抢占优先级,1位响应优先级

4

011

40

4位抢占优先级,0位响应优先级

中断优先级设置步骤(HAL库)

1. 设置整个系统的中断优先级分组:

    void HAL_NVIC_SetPriorityGrouping (NVIC_PriorityGroup_2); // 中断优先级分组为2,也就是2位抢占优先级,2位响应优先级  [注:此函数在Hal_Init()里面调用配置

2. 针对具体每个中断,设置各自的抢占优先级和子优先级:

    void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);  //IRQn为具体中断名,如 USART1_IRQn、EXTI9_5_IRQn等,PreemptPriority和SubPriority为优先级具体数值,分组为2时,取值0~4

3. 使能中断:  

    void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值