【STM32入门】一文搞懂串口通信:波特率、数据位与停止位详解

前言
在嵌入式开发中,串口(UART)是最常用、最基础的调试和通信接口。很多新手在使用 STM32 进行串口通信时,经常会遇到乱码、丢包或者无法接收数据的问题。这通常是因为对串口的时序参数配置理解不够透彻。

今天我们就结合经典的教程笔记,来拆解一下串口通信中最核心的几个概念:波特率、起始位、数据位、校验位和停止位

📌 什么是串口通信?

简单来说,串口通信就是设备之间“排队”传输数据的一种方式。它不需要时钟线同步(异步),全靠双方约定好的规则来收发数据。这个规则,就是我们常说的帧格式

一个标准的 UART 数据帧通常包含以下几个部分:

  1. 空闲状态
  2. 起始位
  3. 数据位
  4. 校验位(可选)
  5. 停止位

下面我们逐一分析这些关键参数。


🔍 核心参数详解

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位 即可满足绝大多数需求。

📊 一图看懂时序逻辑

(此处建议插入一张串口波形图,如下描述)

想象一条示波器上的波形线:

  1. 平时:线路保持高电平(空闲)。
  2. 开始:突然拉低(起始位)。
  3. 传输:高低电平交替变化(数据位,低位在前)。
  4. 结束:重新拉高并保持一段时间(停止位)。

💡 避坑指南

在实际使用 STM32 CubeMX 或寄存器配置串口时,请务必检查以下几点:

  1. TX/RX 接反了吗? 也就是 A 设备的 TX 接 B 设备的 RX,反之亦然。
  2. 共地了吗? 两个板子如果不共地(GND相连),电平参考点不同,通信也会失败。
  3. 参数对齐了吗? 再次强调,波特率、数据位、停止位、校验位这四个参数,收发双方必须一模一样。最常用的“黄金组合”是:115200-8-N-1 (即:波特率115200,8位数据,无校验,1位停止位)。

📝 总结

串口通信虽然古老,但依然是嵌入式工程师手中的瑞士军刀。理解了上述的时序图参数含义,你就掌握了排查串口问题的基本功。下次再遇到乱码,不妨先用逻辑分析仪抓个波形看看,问题往往迎刃而解!

觉得有用的话,欢迎点赞收藏,我们下期见!👋


标签:#STM32 #嵌入式 #串口通信 #UART #单片机 #电子工程 #编程基础

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐