登录/注册

STM32单片机NVIC

STM32单片机NVIC

更多

好的,我们来详细解释一下 STM32 单片机中的 NVIC(嵌套向量中断控制器)

简单来说: NVIC 是 ARM Cortex-M 内核(包括 STM32 使用的 Cortex-M0, M0+, M3, M4, M7, M33 等)内部集成的硬件模块,专门负责管理和协调所有来自片上外设(如 UART, SPI, TIMER, ADC 等)和内核自身(如 SysTick, PendSV)的中断请求。

它就像一个交通指挥中心,核心任务就是高效、有序地处理多个同时或相继发生的中断事件。

? NVIC 的核心功能与作用

  1. 中断优先级管理:

    • 核心任务: 为每个可能发生的中断源分配一个优先级。
    • 优先级规则:
      • 数值越小,优先级越高(0 通常是最高优先级)。
      • 抢占优先级 (Preemption Priority): 高抢占优先级的中断可以打断正在执行的低抢占优先级中断(嵌套中断)。
      • 子优先级/响应优先级 (Subpriority): 当多个中断同时发生(或具有相同抢占优先级的中断排队时),NVIC 会先响应子优先级更高的中断。相同抢占和子优先级时,按硬件固定顺序响应。
    • 优先级分组: 通过设置应用中断及复位控制寄存器 (SCB->AIRCR 中的 PRIGROUP 位) 来划分 抢占优先级位子优先级位 的数量(例如 4 位抢占 + 0 位子优先,或 3+1, 2+2, 1+3, 0+4)。这决定了系统最多能区分多少级抢占和多少个同级中断下的响应顺序。这是 STM32 中断配置的关键步骤之一。
  2. 中断使能/除能:

    • 中断使能寄存器 (ISERx): 用于开启特定通道的中断响应功能。只有使能的中断源发出的请求才会被 NVIC 处理。
    • 中断除能寄存器 (ICERx): 用于关闭特定通道的中断响应功能。
  3. 中断挂起与清除:

    • 中断挂起寄存器 (ISPRx): 当一个中断源发出请求,但处理器当前无法立即响应(比如在处理更高优先级中断)时,该中断会被“挂起”(Pending),对应的挂起标志位会被置位。
    • 中断清除挂起寄存器 (ICPRx): 当需要手动清除(确认)某个已被挂起的中断标志时使用。(通常在中断服务函数中处理完中断后,需要清除外设自身的中断标志,而 NVIC 的挂起标志通常会在响应后自动清除)。
  4. 中断状态查询:

    • 中断活动状态寄存器 (IABRx): 指示某个中断当前是否正在被处理器执行(处于活动状态)。
  5. 中断向量表处理:

    • NVIC 在收到一个被批准响应的中断请求后,会根据该中断的编号(IRQn),自动定位到内存中中断向量表对应的位置
    • 中断向量表 是一个存储着各个中断服务函数 (ISR) 入口地址的数组(通常放在 Flash 起始位置或 RAM 中重定位)。NVIC 从中取出该中断的 ISR 地址,并让处理器跳转到那里执行。
  6. 中断嵌套处理:

    • 基于优先级规则,高抢占优先级的中断可以打断低抢占优先级中断的执行,形成中断嵌套。NVIC 负责在嵌套发生时自动保存和恢复必要的上下文(寄存器状态),确保中断返回后程序能正确继续执行。
  7. 低延迟中断处理:

    • Cortex-M 内核和 NVIC 的设计目标之一就是实现极低的中断延迟(从中断发生到进入 ISR 第一条指令的时间)。NVIC 的硬件自动化和紧耦合设计是实现这一目标的关键。
  8. 尾链优化 (Tail-Chaining):

    • 当一个中断的 ISR 刚结束退出时,如果恰好有一个 已挂起且优先级足够(高于被中断的上下文)的中断在等待,NVIC 会跳过恢复部分上下文再立即保存的部分流程,直接“链入”到等待中断的 ISR。这大大减少了连续中断处理的时间开销。

? 在 STM32 开发中如何使用 NVIC

  1. 系统初始化:

    • 设置向量表偏移(如果需要重定位)。
    • 配置优先级分组 (HAL_NVIC_SetPriorityGrouping() 或直接写 SCB->AIRCR)。通常在整个程序初始化时设置一次,之后不再更改。
  2. 外设中断配置:

    • 初始化具体的外设(如 UART, TIMER 等),并根据需要配置该外设本身的中断触发条件(例如使能 UART 接收完成中断)。
    • 配置该外设对应的中断通道的优先级(抢占 & 子优先级) (HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)).
    • 使能该中断通道 (HAL_NVIC_EnableIRQ(IRQn_Type IRQn))。
  3. 编写中断服务函数 (ISR):

    • 在启动文件 startup_stm32xxxx.s 中已经为每个中断通道预先定义了默认的弱函数(weak 符号)。我们需要在 C 文件中(通常是 stm32xxxx_it.c重新实现(覆盖)这个函数
    • 函数名必须与启动文件中定义的向量名称一致(如 USART1_IRQHandler(void))。
    • 在 ISR 内部:
      • 判断具体是哪个中断源触发的(通过读取外设状态寄存器)。
      • 执行必要的处理逻辑(尽量简短高效!)。
      • 清除外设自身的中断标志位(非常重要,否则会连续触发中断)。
      • NVIC 的挂起位通常在进入 ISR 后会自动清除,一般不需要手动清除 ISPRx
  4. 处理中断嵌套注意事项:

    • 如果中断会被更高优先级中断抢占,需要特别注意共享数据的保护(使用临界区保护或原子操作)。

? 关键点总结

总而言之,NVIC 是 STM32 中断系统的核心大脑?,负责确保多个中断请求能够按照预定的优先级规则,有序、高效地被处理器响应和执行。 理解并正确配置 NVIC 是进行 STM32 中断编程的关键。?

STM32单片机的特点和功能是什么

STM32单片机是一款基于ARM Cortex-M内核的32位闪存微控制器,由STMicroelectronics公司(意法半导体)生产。STM32

2024-01-03 15:33:59

单片机NVIC与EXTI中断详解

的控制。但是各个芯片厂商在设计芯片的时候会对 Cortex-M4内核里面的 NVIC进行裁剪,把不需要的部分去掉,所以说 STM32的 NVIC

2023-11-01 12:35:18

基于STM32单片机的智能衣柜设计

基于STM32单片机的智能衣柜设计

2023-09-04 09:55:25

野火stm32单片机指南者原理图下载

野火stm32单片机指南者原理图下载

资料下载 jf_27772344 2022-01-18 15:11:41

基于STM32单片机的智能灯电路图设计

基于STM32单片机的智能灯电路图设计

资料下载 yuu_cool 2021-07-30 10:21:24

STM32单片机网络远程升级固件的源码下载

STM32单片机网络远程升级固件的源码下载

资料下载 罗程123 2021-04-17 09:27:26

51单片机STM32单片机有哪些区别

大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机

资料下载 417804 2019-08-13 17:32:00

STM32单片机中断及NVIC的详细资料概述

对51单片机有一定了解的都知道51单片机有5个中断源,2个优先级,通过对IP这个寄存器赋值来进行中断优先级的处理而STM32的中断非常强大,每个

资料下载 麻酱 2019-07-17 17:39:00

STM32单片机外部中断简介 STM32单片机外部中断的配置过程

STM32 单片机是一款高性能、低功耗的 32 位微控制器,具有强大的计算能力、灵活的外设模块以及优秀的扩展性,开发周期短、成本低。在单片机应用

2023-08-15 18:21:05

全方位对比STM32单片机和51单片机

萌新初入单片机领域,常会遇到STM32和51单片机两大种类,无法选择其一来提升技术,也不确定哪个

2023-03-02 14:18:19

ARM单片机STM32单片机之间有什么区别

单片机工程师在进行项目开发的时候,经常需要进行单片机选型,根据项目功能需求选择合适的单片,这就要求对每种

2023-01-07 13:59:38

CKS中科芯CKS32F030C8T6 mcu单片机 LQFP48 替换STM32F030C8T6

1970-01-01 08:00:00 至 1970-01-01 08:00:00

详解STM32单片机和51单片机的区别

分享本文,简单分析STM32与51单片机的区别与取舍之处。

2022-04-18 10:45:52

stm32单片机和51单片机区别是什么

单片机也就是单片微型计算机,和集CPU、RAM、ROM、输入输出设备、中断系统在同一个芯片上的器件。 stm32

2021-08-19 18:21:18

STM32和51单片机如何选择

STM32是性价比非常高的32位单片机,片上资源丰富、性价比高、性能不错;而C51单片机是8位的

2020-03-08 11:27:26

7天热门专题 换一换
相关标签