Skip to content

波特率 or 比特率

在单片机常用的串口通信(TTL电平)中,波特率和比特率在数值上是相等的。 (比如你设置波特率 9600,传输速度就是 9600 bps)。

1. 核心比喻:大巴车与乘客

  • 波特率 (Baud Rate) = 车流量
    • 代表马路上每秒钟通过了多少辆大巴车(信号变化的次数/码元速率)。
  • 比特率 (Bit Rate) = 客流量
    • 代表马路上每秒钟通过了多少个乘客(实际的数据量/信息传输速率)。

它们的关系取决于:一辆车里能坐几个人?

2. 详细拆解

情况 A:单片机串口 (UART/TTL) —— “一人一车”

  • 原理: 在串口通信的 TTL 电平中,电压只有两种状态:
    • 高电平 (3.3V) 代表 1
    • 低电平 (0V) 代表 0
  • 比喻: 这是一辆单座跑车。每辆车(每个信号变化)只能拉 1 个乘客(1 bit)。
  • 计算:
    • 如果你每秒发 9600 个信号(波特率 = 9600 Baud)。
    • 那么你也就运送了 9600 个数据位(比特率 = 9600 bps)。
  • 结论: 波特率 = 比特率。这就是为什么在 STM32 开发中,这两个词经常混着用。

情况 B:现代高速通信 (如 4G/5G/宽带) —— “双层大巴”

为了在不增加车流量(带宽有限)的情况下运更多的人,工程师想了个办法:让信号变得更复杂

  • 原理: 假设我们把电压分成 4 个等级(0V, 1V, 2V, 3V)。
    • 0V 代表 00
    • 1V 代表 01
    • 2V 代表 10
    • 3V 代表 11
  • 比喻: 这是一辆双层大巴。每个信号(每辆车)一下子能携带 2 个乘客(2 bits)。
  • 计算:
    • 如果波特率还是 9600 Baud(每秒变 9600 次电压)。
    • 但每次变电压都传了 2 bit,所以比特率 = $9600 \times 2 = 19200$ bps。
  • 结论: 比特率 > 波特率

3. 公式关系

$$比特率 (bps) = 波特率 (Baud) \times \log_2(N)$$

  • $N$ 是信号的等级数量(也叫进制数)。
  • STM32 串口: 只有高低 2 种电平,$N=2$$\log_2(2) = 1$。所以 1 Baud = 1 bit
  • 高级调制 (如 QAM-16): 有 16 种信号状态,$N=16$$\log_2(16) = 4$。所以 1 Baud = 4 bit

4. 为什么 STM32 串口要设“波特率”?

当你写 USART_Init 时,设置 BaudRate = 9600,其实是在约定**“我们说话的语速”**。

因为 UART 是异步通信(没有时钟线),双方必须严格约定好:

“每隔 104微秒 (1/9600秒),我们就去读一次电平状态。”

  • 如果你是 9600,对方是 115200,那就是“鸡同鸭讲”。
  • 你会发现接收到的全是乱码(原本代表 'A' 的 01000001,因为采样时间不对,可能被读成了乱七八糟的 1101...)。

总结

  1. 对于 STM32 开发(UART, I2C, SPI):
    • 因为都是二进制(只有 0 和 1),所以波特率 数值上等于 比特率
    • 你可以简单地认为它们就是传输速度。
  2. 对于通信原理:
    • 波特率是硬件干活的速度(每秒变几次脸)。
    • 比特率是用户收货的速度(每秒收几个数据)。