完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
串口通信中,如果不需要校验位的话,一般格式是:1bit起始位+8bit数据位+1bit停止位。
现在A 和 B按照串口规定的波特率进行通信,假设是9600,且 A是发送,B是接受。 B采用9600的16倍时钟去采样。由于是异步通信,且时钟也不是完全精确的。B的接收可能存在偏移。 请问这种偏移是否是累加的?即A连续发送,上一轮的停止位刚发送完,立刻发送下一轮的起始位。在这样反复发送了非常多轮后,累计起来的误差是否会导致B接收数据错误? 如果B在接收数据时,到接收停止位的时候,并不完全持续一个停止位的时间长度,而是提前就进入等待下一轮起始位的状态,这样做符合通用的做法吗? |
|
相关推荐
7个回答
|
|
实测没啥问题。一般偏差不会太大,
|
|
|
|
对于FPGA设计的串口模块来说,由于起始位检测是独立的,并不是连续的波特率,而是检测到起始位了才开始产生波特率时钟,即每个字节都会进行波特率校正。所以不会有问题
|
|
|
|
诺 其实视频里有讲这个问题 小梅哥视频 你不二选择
|
|
|
|
本帖最后由 月亮下的蛋 于 2016-3-20 17:40 编辑
小梅哥 发表于 2016-3-20 16:54 应用的情景是A连续发送。发完上一轮的停止位立刻发下一轮的起始位。起始位的检测是独立的。作为接收方B来说,检测每一位的时间t0(t0 = 1/9600)是固定的。假设t0是精确的。 所以B的一次完整接收周期是t0*(1+8+1)。假设A连续发送,如果B检测到有数据的时间滞后了t_delay时间,则每一轮检测都滞后t_delay。 这样不会有错。累积的后果也就是,每一轮B晚t_delay接收到数据,而每一轮B接收数据花的时间是等同于A发送所用的时间长度的。 但如果B的时钟并不是精确的,比如略长于t0。那每一轮都会消耗更多的时间。这个多消耗的时间,举个例子说明: B还在接收第n轮的停止位,A已经开始发送n+1轮的起始位了。 而由于每一轮B接收数据, 都花了长于A发送所用的时间,那多次累加下来,就会出现错误了。比如B还在接收第n轮的停止位,A已经在发送第n+1轮的数据了。这样B就会丢数据。 请问这样的理解是对的吗? |
|
|
|
月亮下的蛋 发表于 2016-3-20 17:32 说的有道理。所以uart协议中还存在1.5个停止位和2个停止位的模式 |
|
|
|
感觉是有滞后的,你接收的时钟不准的话,刚开始接收可能能够正确,但是时间久了,是会有偏移的
|
|
|
|
谢谢楼主分享。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1512 浏览 1 评论
1295 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1503 浏览 0 评论
922 浏览 0 评论
2300 浏览 0 评论
1452 浏览 35 评论
5640 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 00:20 , Processed in 0.524654 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号