前言:最近做的一个项目中由于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中代表两相调制码元的情况