1. 中断机制基础认知
中断(Interrupt)是嵌入式系统和计算机体系结构中的核心机制之一。想象一下你正在厨房做饭,突然电话铃响了——这时你会暂时放下锅铲去接电话,通话结束后再回到灶台继续烹饪。中断的工作原理与此高度相似:当CPU正在执行主程序时,如果某个特定事件发生(如串口收到数据),处理器会暂停当前任务,转去执行对应的中断服务程序(ISR),完成后再返回原程序继续执行。
现代微控制器通常支持多种中断源,以STM32为例,其中断系统包含:
- 外部中断(EXTI):对应GPIO引脚的电平变化
- 定时器中断(TIM):用于周期性任务触发
- 串口中断(USART):处理数据收发事件
- DMA中断:在数据传输完成时触发
关键认知:中断的本质是"事件驱动"编程范式,与轮询(Polling)相比能显著提高CPU利用率。实测数据显示,在9600bps波特率下,轮询方式会占用约80%的CPU时间,而中断方式仅需3%-5%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 串口中断的硬件原理
串口通信作为最基础的异步传输方式,其中断触发主要依赖几个关键寄存器:
2.1 状态寄存器(USART_SR)
- RXNE(接收缓冲区非空):当收到一个完整字节时置1
- TXE(发送缓冲区空):当发送寄存器可写入新数据时置1
- TC(传输完成):整个数据帧(包括停止位)发送完毕时置1
2.2 控制寄存器(USART_CR1)
- RXNEIE:接收中断使能位
- TXEIE:发送中断使能位
- TCIE:传输完成中断使能位
以STM32F103的USART1为例,典型的中断配置流程如下:
c复制// 使能USART1全局中断
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
