STM32内核中断和外设中断

STM32 的中断分为Cortex-M 内核中断(系统异常)STM32 片上外设中断------ 内核中断是 Cortex-M3/M4/M7 内核自带的通用异常,所有 STM32 该内核系列通用;外设中断是 STM32 片上外设(如 USART、ADC、TIM)对应的中断,不同系列(F1/F4/F7/H7)外设数量和中断通道略有差异,但核心常用外设中断一致。以下按 "内核中断(全系列通用)+ 常用外设中断(覆盖 M3/M4/M7 核心系列)" 分类,详细列出并说明:

一、Cortex-M3/M4/M7 内核中断(系统异常,全系列通用)

内核中断是 Cortex-M 内核固化的系统异常,优先级由内核默认分配(部分可配置),直接影响系统稳定性,与 FreeRTOS 关联紧密。按优先级从高到低排列:

中断名称 硬件来源 触发方式 核心作用 FreeRTOS 关联要点
NMI(不可屏蔽中断) 内核内置不可屏蔽异常通道 硬件触发(如外部 NMI 引脚电平、内部故障) 最高优先级中断,不可被屏蔽,用于处理致命故障(如电源掉电、硬件错误) 无直接关联,但触发后会打断所有任务和其他中断,FreeRTOS 无法干预
HardFault(硬故障) 内核内置故障检测模块 硬件触发(如非法内存访问、总线错误) 处理内核级致命故障,如数组越界、空指针访问、栈溢出(未开启栈检测时) 任务执行错误(如非法 API 调用)可能触发,FreeRTOS 的configASSERT可辅助定位故障原因
MemManage(内存管理故障) 内核 MMU/MPU 模块 硬件触发(如 MPU 权限违规、非法内存访问) 仅支持 MPU 的内核(M4/FPU、M7)有效,处理内存访问权限问题 若启用 MPU,任务访问非法内存会触发,FreeRTOS 需配合 MPU 配置任务内存权限
BusFault(总线故障) 内核总线接口模块 硬件触发(如外设访问超时、总线冲突) 处理总线层面错误,如访问未初始化的外设寄存器、DMA 传输错误 外设中断配置错误(如地址错误)可能触发,需检查外设初始化顺序
UsageFault(用法故障) 内核指令执行模块 硬件触发(如未定义指令、除数为 0) 处理指令执行错误,如使用 ARM 指令(STM32 仅支持 Thumb)、浮点指令未开启 FPU FreeRTOS 中若启用 FPU 但未配置,任务执行浮点运算可能触发
SVC(系统调用中断) 内核系统调用接口 软件触发(svc指令) 提供用户态到内核态的调用接口,用于特权操作(如任务创建、权限切换) FreeRTOS 的vPortSVCHandler实现启动第一个任务,是 RTOS 启动的核心中断
DebugMon(调试监控) 内核调试模块 硬件触发(如调试器断点、单步执行) 调试时使用,监控程序运行状态 调试 FreeRTOS 任务时触发,不影响 RTOS 正常运行,调试完成后自动恢复
PendSV(任务切换中断) 内核上下文切换模块 软件触发(写 NVIC 悬起寄存器) 实现任务上下文切换,保存 / 恢复任务寄存器状态 FreeRTOS 核心依赖,优先级设为最低(15),确保不打断外设中断和 SysTick
SysTick(系统滴答中断) 内核内置定时器 硬件自动触发(按配置周期溢出) 提供系统时基,触发任务调度、延时计时 FreeRTOS 的xPortSysTickHandler实现时基更新和任务调度触发,周期由configTICK_RATE_HZ配置

内核中断关键说明:

  1. 优先级:NMI > HardFault > MemManage/BusFault/UsageFault > SVC > DebugMon > PendSV = SysTick(用户可配置部分优先级,但不建议修改);
  2. 除 PendSV 和 SysTick 外,其他内核中断均为 "故障处理类",触发后需排查硬件或代码错误,否则系统可能崩溃。

二、STM32 常用外设中断(覆盖 M3/M4/M7 核心系列)

外设中断是 STM32 片上外设(如 GPIO、USART、ADC)对应的中断,由外设硬件事件触发,优先级通过 NVIC 配置(用户代码中已配置 NVIC 组 4)。以下按 "功能分类" 列出常用外设中断,标注系列差异:

(一)GPIO 中断(按键、传感器输入常用)

中断名称 支持系列 触发方式 核心作用
EXTI0~EXTI15(外部中断线) 全系列 硬件触发(上升沿、下降沿、双边沿) 对应 GPIO 引脚 0~15 的电平变化,如按键按下(下降沿)、传感器数据就绪(上升沿)
EXTI16(PVD 中断) 全系列 硬件触发(电源电压阈值变化) 监控电源电压,低于 / 高于阈值时触发,用于电源保护
EXTI17(RTC 闹钟) 全系列 硬件触发(RTC 闹钟时间到达) RTC 定时触发,如定时采集数据、唤醒低功耗系统
EXTI18(USB 唤醒) F4/F7/H7 硬件触发(USB 设备连接 / 唤醒) USB 相关唤醒功能,如 USB 插入时唤醒系统

(二)通信类外设中断(数据收发常用)

中断名称 支持系列 触发方式 核心作用
USART1~USART8(串口中断) 全系列(数量因型号而异) 硬件触发(接收数据就绪、发送完成、错误) 串口数据收发,如用户代码中 USART 中断接收传感器数据、发送调试信息
UART4~UART5(通用串口) F4/F7/H7 同上 额外的串口通道,用于多设备通信(如同时连接蓝牙、GPS)
SPI1~SPI6(SPI 中断) 全系列(数量因型号而异) 硬件触发(接收完成、发送完成、错误) SPI 外设通信,如 OLED 屏显示、Flash 芯片读写、传感器数据采集
I2C1~I2C4(I2C 中断) 全系列(数量因型号而异) 硬件触发(接收完成、发送完成、地址匹配) I2C 外设通信,如温湿度传感器(DHT11/I2C 版)、EEPROM 存储
CAN1~CAN2(CAN 中断) F1/F4/F7/H7 硬件触发(接收完成、发送完成、错误) CAN 总线通信,如汽车电子、工业控制设备通信
ETH(以太网中断) F4/F7/H7 硬件触发(接收数据、发送完成、链接状态变化) 以太网数据收发,如网络通信、物联网数据上传
USB OTG(USB 中断) F4/F7/H7 硬件触发(USB 数据收发、设备枚举) USB 设备 / 主机通信,如 USB 存储、USB 转串口

(三)定时器类中断(定时、PWM 常用)

中断名称 支持系列 触发方式 核心作用
TIM1~TIM17(定时器中断) 全系列(数量因型号而异) 硬件触发(溢出、比较匹配、捕获) 定时任务(如 10ms 采集一次数据)、PWM 输出(如电机控制)、脉冲捕获(如频率测量)
TIM1_TRG_COM(定时器触发 / 比较中断) F1/F4/F7 硬件触发(触发事件、比较输出) 定时器同步、互补 PWM 输出(如电机驱动)
RTC 中断(实时时钟) 全系列 硬件触发(秒中断、闹钟、周期中断) 低功耗定时、日期时间管理,如定时唤醒系统、日志时间戳

(四)模拟类外设中断(数据采集常用)

中断名称 支持系列 触发方式 核心作用
ADC1~ADC3(ADC 中断) 全系列(数量因型号而异) 硬件触发(转换完成、注入转换完成、错误) ADC 数据采集完成,如用户代码中 ADC 单通道中断读取传感器数据
DAC 中断(数模转换) F1/F4/F7/H7 硬件触发(转换完成) DAC 输出同步,如波形生成、模拟信号输出

(五)DMA 类中断(高速数据传输常用)

中断名称 支持系列 触发方式 核心作用
DMA1_Channel1~DMA1_Channel7 全系列(数量因型号而异) 硬件触发(传输完成、半传输、错误) 高速数据传输,如 ADC 采集数据直接存入内存、串口接收大数据块、SPI Flash 读写
DMA2_Channel1~DMA2_Channel7 F4/F7/H7 同上 额外的 DMA 通道,用于多设备同时高速传输

(六)其他常用外设中断

中断名称 支持系列 触发方式 核心作用
SDIO(SD 卡中断) F4/F7/H7 硬件触发(数据传输完成、错误) SD 卡数据读写,如存储日志、读取配置文件
CRC(CRC 校验中断) F4/F7/H7 硬件触发(校验完成、错误) 数据 CRC 校验,如通信数据完整性检查
DMA2D(图形 DMA) F4/F7/H7 硬件触发(图形传输完成) 图形数据处理,如 LCD 屏显示刷新

外设中断关键说明:

  1. 系列差异:F1 系列外设较少(如无 DMA2D、ETH),F4/F7/H7 系列外设更丰富(支持更多串口、SPI、DMA 通道);
  2. 中断通道:同一外设可能对应多个中断(如 USART 有 "接收就绪""发送完成""错误" 中断),需通过NVIC_InitStruct.NVIC_IRQChannel指定具体通道;
  3. 优先级配置:用户代码中已配置 NVIC 组 4(4bit 抢占优先级),外设中断优先级建议设为 0~14(高于内核中断 15),实时性要求高的中断(如 ADC 采集)设为 0~5,普通中断(如串口调试)设为 6~14。

三、核心使用规则(结合用户代码与 FreeRTOS)

  1. 内核中断不可随意修改:除 SVC、PendSV、SysTick 外,其他内核中断为故障处理类,触发后需先排查硬件 / 代码错误;
  2. 外设中断配置流程:用户代码中需先初始化外设(如 ADC、USART),再配置 NVIC 中断通道、优先级,最后使能中断;
  3. FreeRTOS 协同要点:
    • 外设中断服务函数中需用中断安全 API(如xSemaphoreGiveFromISR),不可调用普通 API(如vTaskDelay);
    • 避免中断处理时间过长,核心逻辑(如数据处理)需交给 FreeRTOS 任务,中断仅做 "标记 / 通知";
相关推荐
v先v关v住v获v取2 小时前
圆形通风管道灰尘清理机器人设计14张cad+三维图+设计说明书
科技·单片机·51单片机
一路往蓝-Anbo2 小时前
【第23期】资源保护:关中断 vs 互斥量 (Mutex)
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网
￴ㅤ￴￴ㅤ9527超级帅2 小时前
3、stm32的复位和时钟控制RCC
stm32·单片机·嵌入式硬件
雾岛听风眠2 小时前
MCU中的晶振
单片机·嵌入式硬件
up向上up2 小时前
基于STM32的多参数水温水质检测报警Proteus仿真设计
stm32·嵌入式硬件·proteus
ACP广源盛139246256732 小时前
GSV2125D@ACP#2125产品规格参数详解及产品应用分享
嵌入式硬件·计算机外设·音视频
旧梦吟2 小时前
脚本网页 嵌入式-笔记模板
stm32·嵌入式硬件·html5
余生皆假期-3 小时前
SVPWM 扇区判断法和七段式实现
单片机·嵌入式硬件
v先v关v住v获v取3 小时前
番茄打浆机结构设计cad13+三维图+设计说明说
科技·单片机·51单片机