【STM32入门】一文搞懂串口通信:波特率、数据位与停止位详解
前言
在嵌入式开发中,串口(UART)是最常用、最基础的调试和通信接口。很多新手在使用 STM32 进行串口通信时,经常会遇到乱码、丢包或者无法接收数据的问题。这通常是因为对串口的时序和参数配置理解不够透彻。今天我们就结合经典的教程笔记,来拆解一下串口通信中最核心的几个概念:波特率、起始位、数据位、校验位和停止位。
📌 什么是串口通信?
简单来说,串口通信就是设备之间“排队”传输数据的一种方式。它不需要时钟线同步(异步),全靠双方约定好的规则来收发数据。这个规则,就是我们常说的帧格式。
一个标准的 UART 数据帧通常包含以下几个部分:
- 空闲状态
- 起始位
- 数据位
- 校验位(可选)
- 停止位
下面我们逐一分析这些关键参数。
🔍 核心参数详解
1. 波特率 (Baud Rate)
- 定义:衡量串口通信速率的指标,单位是 bps (bits per second)。
- 通俗理解:就是每秒钟能传输多少个二进制位(0或1)。
- 常见数值:9600, 115200, 921600 等。
- ⚠️ 注意:通信双方的波特率必须完全一致!如果发送方是 115200,接收方是 9600,收到的绝对是一堆乱码。
2. 起始位 (Start Bit)
- 电平状态:固定为低电平(Logic 0)。
- 作用:它是数据帧的“发令枪”。当线路从空闲的高电平跳变到低电平时,接收方就知道:“嘿,有新数据要来了!”从而开始准备接收后续的数据位。
3. 数据位 (Data Bits)
- 定义:这是真正承载有效信息的部分。
- 长度:通常配置为8位(1个字节),也可以配置为 7位 或 9位。
- 传输顺序:低位先行 (LSB First)。
- 例如要发送十六进制
0x01(二进制0000 0001),线上会先传最右边的1,最后传最左边的0。
- 例如要发送十六进制
- 电平表示:
- 高电平 = 1
- 低电平 = 0
4. 校验位 (Parity Bit) —— 可选
- 作用:用于简单的错误检测。
- 原理:根据数据位中“1”的个数来决定这一位是0还是1。
- 奇校验:保证整个数据(含校验位)中“1”的个数是奇数。
- 偶校验:保证“1”的个数是偶数。
- 无校验:现代通信中常用,因为效率更高,可靠性交给上层协议(如TCP/IP)处理。
5. 停止位 (Stop Bit)
- 电平状态:固定为高电平(Logic 1)。
- 作用:标志着一个数据帧的结束。同时,它也为下一个数据帧的起始位提供缓冲时间。
- 长度:可以是 1位、1.5位 或 2位。通常情况下,配置为1位即可满足绝大多数需求。
📊 一图看懂时序逻辑
(此处建议插入一张串口波形图,如下描述)
想象一条示波器上的波形线:
- 平时:线路保持高电平(空闲)。
- 开始:突然拉低(起始位)。
- 传输:高低电平交替变化(数据位,低位在前)。
- 结束:重新拉高并保持一段时间(停止位)。
💡 避坑指南
在实际使用 STM32 CubeMX 或寄存器配置串口时,请务必检查以下几点:
- TX/RX 接反了吗?也就是 A 设备的 TX 接 B 设备的 RX,反之亦然。
- 共地了吗?两个板子如果不共地(GND相连),电平参考点不同,通信也会失败。
- 参数对齐了吗?再次强调,波特率、数据位、停止位、校验位这四个参数,收发双方必须一模一样。最常用的“黄金组合”是:115200-8-N-1(即:波特率115200,8位数据,无校验,1位停止位)。
📝 总结
串口通信虽然古老,但依然是嵌入式工程师手中的瑞士军刀。理解了上述的时序图和参数含义,你就掌握了排查串口问题的基本功。下次再遇到乱码,不妨先用逻辑分析仪抓个波形看看,问题往往迎刃而解!
觉得有用的话,欢迎点赞收藏,我们下期见!👋
标签:#STM32 #嵌入式 #串口通信 #UART #单片机 #电子工程 #编程基础