
在使用 STM32 的 HAL 库开发串口通信时,很多人对中断的流转过程一知半解,经常遇到“只能进一次中断”或“程序卡死”的问题。今天,我们以解析 JY901B 陀螺仪传感器模块的串口接收(USART3)为例,彻底扒开 HAL 库串口中断的底层逻辑。1. NVIC 中断优先级与使能📍 代码位置:usart.c⚙️ 寄存器本质:NVIC 相关寄存器配置很多人在配置完这一步后,疑惑为什么串口收到数据还是进不了中断。这里有一个必须跨越的认知门槛:💡 关键理解:NVIC 使能 ≠ USART 外设中断使能NVIC 使能:是让中断信号有资格从外设到达 CPU 内核(修好马路)。USART 外设使能(如 RXNEIE):是让外设在收到数据时,能够主动发出中断请求(允许发车)。这两个开关必须同时打开。我们在 CubeMX 配置生成的初始化代码中,往往只打开了 NVIC 这边的开关,而 USART 这边的RXNEIE默认是关闭的——这正是后续调用HAL_UART_Receive_IT需要去完成的核心工作。2. 硬件入口:USART3 中断服务函数 (ISR)📍 代码位置:stm32f4xx_it.c这是 Cortex-M4 的中断向量表直接指向的硬件级函数。当硬件触发了 USART3 中断后,CPU 会立刻放下手头的工作,执行流直接跳入这里:C