UART通信协议(一)比特率和波特率

前言:最近做的一个项目中由于MCU的串口数不够,需要用GPIO来手动模拟串口。一动手才发现自己的基础很薄弱,对于UART的理解并不深入,特此边学习边整理记录下。

比特率和波特率

  • 比特率:每秒钟传送的二进制比特数,单位是bps。

  • 波特率:每秒钟传送的码元数,单位是Bd/s。

  • 比特率和波特率的关系:

  • 错误理解:波特率 = 比特率 x 传送一个字节需要的比特数

  • 比如:假设在UART中,以9600的波特率进行数据调制,其中传送每个字节含1个起始位,8个数据位,2个停止位,无校验位,那么传送一个字节需要的比特数是10,按照上述公式计算所得的比特率是960bps。笔者也曾犯过这样的错误,直到自己模拟串口时,出现错误才发现。

  • 正确理解:波特率 = 比特率 x 调制一个码元所需要的比特数

  • 码元:相同时间间隔内的信号表示一个当码元的离散状态个数M大于2时,称为M进制码元。

  • 例如:两相调制码元的离散状态有2种(单个调制状态对应1个二进制位),0或1;四相调制码元的离散状态有4种(单个调制状态对应2个二进制位),00,01,10和11;八相调制码元的离散状态有8种(单个调制状态对应3个二进制位),以此类推。

  • 如下图所示,a中代表两相调制码元的情况,比如用+3V代表逻辑1,-3V代表逻辑0;b中代表4相调制的情况,用+1V代表00,+3V代表01,-1V代表10,-3V代表11,在同一个周期T内,有4种不同的电平代表4种不同的状态。

UART通信协议(一)比特率和波特率_第1张图片
总结在嵌入式的大多数情况下,逻辑状态只有0和1,也就h是上述所说的两相调制,这时,调制一个码元所需要的bit数为1,即波特率 = 比特率。而在传输一些音频信息文件时,很有可能要进行解压缩处理,这时就需要进行信号的调制处理,调制一个码元需要多个bit数,即波特率不等于比特率。

你可能感兴趣的:(MCU)