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 任务,中断仅做 "标记 / 通知";
相关推荐
自由的好好干活1 天前
UBI镜像文件打包与编辑
linux·嵌入式硬件
F133168929571 天前
5G矿山车载监控终端山河矿卡定位监控终端
stm32·单片机·嵌入式硬件·5g·51单片机·硬件工程
小郭团队1 天前
1_5_五段式SVPWM (传统算法反正切+DPWM1)算法理论与 MATLAB 实现详解
人工智能·嵌入式硬件·算法·dsp开发
vsropy1 天前
keil5无法注释中文
stm32·单片机
csdn_te_download_0041 天前
Keil5安装教程 基于C51 安装教程与配置完全指南
stm32·单片机·嵌入式硬件
ベadvance courageouslyミ1 天前
51单片机相关
单片机·51单片机·定时器·pwm·蜂鸣器·中断·独立按键
送外卖的工程师1 天前
STM32F103 驱动 BMP280 气压温湿度传感器 + OLED 显示教程
stm32·单片机·嵌入式硬件·mcu·物联网·proteus·rtdbs
2501_927773071 天前
嵌入式51单片机——中断
stm32·单片机·嵌入式硬件
玩转以太网1 天前
WIZnet以太网单片机选型指南
单片机·嵌入式硬件·以太网
tianyazhichiC1 天前
stm32f103 标准外设库下载
stm32·单片机·嵌入式硬件