串口通信之波特率计算

在信息传输通道中,携带数据信息的信号单元叫作码元(因为串口是1bit进行传输的,所以其码元就代表一个二进制数),每秒通过信号传输的码元数称为码元的传输速率,简称“波特率”,常用符号“Baud”表示,其单位为“波特每秒”(Bps)。串口常见的波特率有4800、9600、115 200等,此处我们选用9600的波特率进行讲解。
通信信道每秒传输的信息量称为位传输速率,简称“比特率”,其单位为“每秒比特数”(bps)。比特率可由波特率计算得出,公式为
比特率=波特率×单个调制状态对应的二进制位数
如果使用的是9600的波特率,其串口的比特率为
9600Bps×1bit = 9600bps
由计算得串口发送或者接收1bit数据的时间为一个波特,即1/9600s,如果用50MHz(周期为20ns)的系统时钟来计数,需要计数的个数为cnt = (1s×10**9)ns/9600bit)ns/20ns ≈ 5208个系统时钟周期,即每位数据之间的间隔要在50MHz的时钟频率下计数5208次。
上位机通过串口发送8bit数据时,会自动在发8bit有效数据前发一个波特时间的起始位,也会自动在发完8bit有效数据后发一个停止位。同理,串口助手接收上位机发送的数据前,必须检测到一个波特时间的起始位才能开始接收数据,接收完8bit的数据后,再接收一个波特时间的停止位。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐