标题:
串口模块
[打印本页]
作者:
51黑黑黑
时间:
2016-2-23 17:44
标题:
串口模块
串口传输还有另一个重要参数就是“波特率”。很多朋友都误解“波特率”是串口传输
的传输速度,这样的理解在宏观上是无误。但是在微观上“波特率”就是串口传输中“一
个位的周期”,换句话说亦是“一个位所逗留的时间”。
常用的波特率有9600 bps 和115200 bps ( bit per second )。“9600 bps”表示每秒可
以传输9600 位。但是经过公式计算“一个位的周期”就会暴露出来。
一个位的周期= 1 / bps
= 1/ 9600
= 0.000104166666666667
从上述的公式,我们明白一个事实9600 bps ,一位数据占用0.000104166666666667s时
间。如果是一帧11 位的数据,就需要
0.000104166666666667 x 11 = 0.00114583333333334
那么一秒钟内可以传输
1 / 0.00114583333333334 = 872.727272727268
872.727272727268 个帧数据。
当然这只是在数字上计算出来而已,但是实际上还有许多看不见的延迟因数。
串口传输数据“从最低位开始,到最高位结束”。?
图2?
如上图所示,数据采集都是在“每位数据的中间”进行着。?
9600 bps 传输速度使一位数据的周期是0.000104166666666667s 。以20Mhz 时钟频率
要得到上述的定时需要:N = 0.000104166666666667 / ( 1 / 20Mhz ) =2083如果从零开始算起2083 - 1 亦即2082 个计数。?
assign BPS_CLK = ( Count_BPS == 12'd1041 ) ? 1'b1 :1'b0;这行代码是在传输时钟的中间采集数据。?
串口接收
主要看控制芯片自己写的时钟如图2。也就是说,RX_Pin_In数据的时钟是由发送端控制,bps_module的时钟由芯片控制。发送端按波特率(一定的时钟频率)发送过来的时候,我们自己写出一个时钟,这个时钟恰好在发送端的时钟的?中间,所以可以这样来稳定接收数据!
串口发送
主要看bps_module的时钟图4,发送周期依然是2082。
“怎么定时发送是发生在Count_BPS 计数的一半?”
图3?
图4?
图3是产生3 个“定时发送”。每个“定时发送”是在计数12'd1041发生。读者尝试数数看,两个“定时发送”的之间到底相差了多少个计数?没错,是12'd2082个计数。这下明白怎么一回事了吧!
上一个定时的产生与下一个定时产生的之间才是重点
,也就说“一位数据的周期"定义在两个定时的之间。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1