从printf重定向到中断接收:STM32串口通信全流程实战解析
在嵌入式开发中,串口通信就像开发者的"听诊器",既能输出调试信息观察系统状态,又能与外部设备交换数据。对于STM32开发者而言,掌握USART模块的完整配置流程是从入门到进阶的关键一步。本文将基于正点原子的usart.c实现,带你从零构建一个同时支持printf调试输出和中断接收不定长数据的通信系统。
1. USART硬件初始化:构建通信基础
任何通信系统的起点都是正确的硬件配置。对于STM32F103的USART1模块,我们需要关注三个核心部分:时钟使能、GPIO配置和串口参数设置。
1.1 时钟与GPIO配置
USART1位于APB2总线上,与GPIOA的时钟需要同时使能:
c复制RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO模式配置需要特别注意:
- TX引脚(PA9)应配置为复用推挽输出
- RX引脚(PA10)应配置为浮空输入
实际项目中,如果通信距离较远,建议为RX引脚添加外部上拉电阻,提高抗干扰能力
1.2 串口参数详解
USART_InitTypeDef结构体包含所有关键参数:
| 参数 | 典型值 | 说明 |
|---|---|---|
| BaudRate | 115200 | 需与通信方严格一致 |
| WordLength | 8b | 7b/8b/9b可选 |
| StopBits | 1 | 1/0.5/1.5/2可选 |
| Parity | No | 奇/偶/无校验 |
| HardwareFlowControl | None | 硬件流控开关 |
| Mode | Tx+Rx | 收发模式选择 |
c复制USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStr
