平时使用串口打印出现乱码的绝大部分原因是串口波特率没对。那么我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念。
什么是波特率、比特率?
-
比特率(Bitrate)
表示每秒钟传输的二进制
位数,单位为比特每秒(bit/s)。 -
波特率(Baudrate)
表示每秒钟传送的码元
符号的个数,是衡量数据传送速率的指标。 -
码元
是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。
常见的通讯传输中,用 0V 表示数字 0, 5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致。
如果在通讯传输中,有 0V、2V、 4V 以及 6V 分别表示二进制数 00、 01、 10、 11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。
因为很多常见的通讯(比如串口通讯
)中一个码元都是表示两种状态,所以大家常常直接以波特率来表示比特率 。
串口通讯协议
在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其数据帧组成如下:
下面我们来实际验证一下其数据帧是不是真的是这样的。编写如下代码:
代码很简单,就是使用串口不断地往外发数据0xAA
(当然发送其它数据也是可以的) 。我们的串口配置如下: