1. 项目概述:UART串口在嵌入式开发中的核心地位
在嵌入式系统开发中,UART(Universal Asynchronous Receiver/Transmitter)串口通信堪称工程师的"瑞士军刀"。作为最古老却又最可靠的通信方式之一,从8位单片机到32位ARM处理器,几乎每个嵌入式设备都会保留至少一个UART接口。我十年前刚入行时,调试的第一个外设就是通过UART打印"Hello World",如今在IoT设备开发中,UART仍然是传感器数据采集、固件升级和调试输出的首选方案。
与SPI、I2C等同步通信协议不同,UART采用异步传输机制,仅需TX(发送)、RX(接收)两根信号线即可实现全双工通信。这种简约设计使其在PCB布线、抗干扰和远距离传输(配合RS-232/485转换器)方面具有独特优势。典型的应用场景包括:
- 通过USB转TTL模块与PC通信调试
- 连接GPS、蓝牙、Wi-Fi等通信模块
- 工业现场与PLC设备的数据交互
- 嵌入式Linux系统的控制台输出
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与电路设计要点
2.1 硬件选型指南
开发UART通信首先需要确认硬件支持。以常见的STM32F103C8T6(蓝色药丸开发板)为例,其USART1默认对应PA9(TX)、PA10(RX)引脚。实际项目中需注意:
-
电平匹配:MCU通常采用3.3V TTL电平,而PC端RS-232使用±12V电平。必须使用CH340G、CP2102等USB转TTL模块进行转换。我曾因直接连接烧毁过串口芯片,教训深刻。
-
波特率容差:常见波特率有9600、115200等。根据STM32参考手册,当使用8MHz晶振时,配置115200波特率会产生2.12%误差(实际117647),勉强满足小于3%的要求。若需更高精度,建议改用16MHz晶振。
-
硬件流控:CTS/RTS引脚在高速传输或Linux系统下非常有用,可防止缓冲区溢出。但多数简单应用可禁用。
2.2 典型连接电路
code复制MCU(TX) ---> TTL模块(RX)
MCU(RX) <--- TTL模块(TX)
MCU(GND) --- TTL模块(GND)
重要提示:务必先连接共地(GND),再接信号线。我曾遇到因漏接GND导致数据乱码,排查了整整一天。
3. 底层驱动开发实战
3.1 STM32CubeMX配置
使用STM32CubeMX工具可快速生成初始化代码:
- 在Pinout视图中启用USART1,模式选择"Asynchronous"
- 配置参数:115200波特率、8数据位、无校验、1停止位
- 开启中断(NVIC Settings中使能USART1全局中断)
- 生成代码时勾选"Generate peripheral initialization as a pair of .c/.h files"
3.2 关键寄存器解析
即使使用HAL库,了解底层寄存器仍对调试
