1. STM32 CubeIDE串口中断模式实战指南
在嵌入式开发中,串口通信就像设备与外界对话的"嘴巴"和"耳朵",而中断模式则是让这个对话过程更高效的关键技术。我最近用STM32CubeIDE完成了一个工业传感器的数据采集项目,实测中断模式比轮询方式节省了约60%的CPU资源。下面就把这套经过实战检验的串口中断开发方法完整分享给大家。
2. 环境准备与工程创建
2.1 硬件选型要点
推荐使用STM32F4 Discovery开发板入门,其USART2接口已直接连接板载ST-LINK的虚拟串口,省去额外USB转TTL模块。若使用自定义板卡,务必注意:
- TX/RX引脚需交叉连接(MCU的TX接对方RX)
- 共地处理必不可少
- 波特率误差控制在2%以内(使用25MHz外部晶振时,115200波特率实际误差仅0.16%)
2.2 CubeMX工程配置
- 在Pinout视图启用USARTx的异步模式
- Configuration标签页设置:
- Baud Rate:115200(常用值)
- Word Length:8bit(含校验位选9bit)
- Parity:None(除非特殊需求)
- Stop Bits:1
- NVIC Settings中勾选USARTx全局中断
- 生成代码前务必Project Manager→Code Generator勾选"Generate peripheral initialization as a pair of .c/.h files"
注意:HAL库默认开启串口中断回调函数弱定义,我们只需在main.c重写所需回调即可,无需修改库文件。
3. 中断处理核心实现
3.1 接收中断配置
在main.c添加以下代码:
c复制// 全局缓冲区定义
#define RX_BUF_SIZE 256
uint8_t rx_buf[RX_BUF_SIZE];
uint16_t rx_index = 0;
// 重写接收完成回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if(huart->Instance == USART2) {
if(rx
