找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3190|回复: 0
打印 上一主题 下一主题
收起左侧

串口模块

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 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个计数。这下明白怎么一回事了吧!上一个定时的产生与下一个定时产生的之间才是重点,也就说“一位数据的周期"定义在两个定时的之间。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表