搜索
bottom↓
回复: 15

UART通信过程的理解

[复制链接]

出0入0汤圆

发表于 2017-12-1 16:53:08 | 显示全部楼层 |阅读模式
刚刚接触UART通信,不是很明白这个过程。我的理解如下:串口接收数据的过程中,在没有数据的时候,RX一直为高,当有数据过来的时候,会有一个下降沿出现,标明有数据来了,然后就可以开始接收数据了,数据接收完后会有一个停止位表示数据已经全部接收,之后RX又一直保持高电平,直到有下一次数据过来。我的理解是对的吗?还有,我在网上看到说如果没有接收到停止位,说明帧出错,那么,如何判断有没有接收到停止位呢(停止位为1,数据接收完后RX也是一直为1,如何区分)?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981

出0入0汤圆

发表于 2017-12-1 17:03:38 来自手机 | 显示全部楼层
异步通讯接收使用起始位来表明传输开始,有校验位的话,停止位的位置是11位,判断该位的值,为高说明完整接收,为低则帧错误

出0入0汤圆

发表于 2017-12-1 17:14:28 | 显示全部楼层
我的理解如下:串口接收数据的过程中,在没有数据的时候,RX一直为高,当有数据过来的时候,会有一个下降沿出现,标明有数据来了,然后就可以开始接收数据了,数据接收完后会有一个停止位表示数据已经全部接收,之后RX又一直保持高电平,直到有下一次数据过来。我的理解是对的吗?

    是的
还有,我在网上看到说如果没有接收到停止位,说明帧出错,那么,如何判断有没有接收到停止位呢(停止位为1,数据接收完后RX也是一直为1,如何区分)?

    MCU带UART功能就会有硬件去处理;除非是用IO口模拟串口接收,如波特率为9600bps,那么每个位时长为104us,当你检测到IO下降沿开始104us后的104us为最1位数据,在下个104us第为第2位数据,
以此类推,到第9位如果没有奇偶位就是停止位,判断104us内是否为高电平就行。

出0入0汤圆

 楼主| 发表于 2017-12-1 17:14:37 | 显示全部楼层
砂山老妖 发表于 2017-12-1 17:03
异步通讯接收使用起始位来表明传输开始,有校验位的话,停止位的位置是11位,判断该位的值,为高说明完整接 ...


停止位的位置是固定的吗?数据位不是可能是7位或者8位吗

出0入8汤圆

发表于 2017-12-1 17:17:53 | 显示全部楼层
你的理解是对的。
异步通信的话,靠每个 bit 维持的时间(对应于 9600 而言,每个 bit 的时间约为 104 us),来实现数据传输识别。
在停止位对应的 bit 的维持时间内,需要检测到高即可。

出0入8汤圆

发表于 2017-12-1 17:25:04 | 显示全部楼层
myshworks 发表于 2017-12-1 17:14
停止位的位置是固定的吗?数据位不是可能是7位或者8位吗


不固定,
但位于哪个位置,你在 coding 时,你是知道的,相应的硬件也就知道了。

出0入0汤圆

发表于 2017-12-1 17:31:13 来自手机 | 显示全部楼层
数据格式根据应用定死就行了,你还要随机变化吗?

出0入0汤圆

发表于 2017-12-1 17:34:58 | 显示全部楼层
数字电路的世界,都是围绕时钟一拍拍来,   UART一半会16倍或多少倍过采样,  以波特率为基本节拍。  
你按节拍一步步走逻辑。

出0入442汤圆

发表于 2017-12-1 18:10:33 来自手机 | 显示全部楼层
strongking 发表于 2017-12-1 17:14
是的

    MCU带UART功能就会有硬件去处理;除非是用IO口模拟串口接收,如波特率为9600bps,那么每个位 ...

你这频率太低了,容易误码。一般都要3X采样,精度想高点要做数字低通+数字量化+多倍采样+字符同步。

出0入0汤圆

发表于 2017-12-1 18:39:39 | 显示全部楼层
楼上说的都挺好,学习了。

出0入0汤圆

 楼主| 发表于 2017-12-1 18:44:21 | 显示全部楼层
砂山老妖 发表于 2017-12-1 17:31
数据格式根据应用定死就行了,你还要随机变化吗?

哈哈,是我不懂,谢谢

出0入0汤圆

 楼主| 发表于 2017-12-1 18:45:56 | 显示全部楼层
wye11083 发表于 2017-12-1 18:10
你这频率太低了,容易误码。一般都要3X采样,精度想高点要做数字低通+数字量化+多倍采样+字符同步。 ...

我是在看着例程学习,里面用的是16X,但是没懂为什么UART时钟频率要设计成波特率的16倍?这个具体是如何采样的呢?

出0入0汤圆

 楼主| 发表于 2017-12-1 18:47:29 | 显示全部楼层
security 发表于 2017-12-1 17:17
你的理解是对的。
异步通信的话,靠每个 bit 维持的时间(对应于 9600 而言,每个 bit 的时间约为 104 us) ...

波特率为9600,为什么每个bit的时间是104,公式是什么

出0入0汤圆

发表于 2017-12-1 19:16:02 | 显示全部楼层
停止位主要是为了保证起始位的下降沿。没有停止位保证在开始发送下一字节时的电平变为高的话,下一字节起始位的下降沿就无从谈起了。
如果检测不到停止位,那说明通信可能存在问题。

出0入4汤圆

发表于 2017-12-1 19:23:03 | 显示全部楼层
myshworks 发表于 2017-12-1 18:47
波特率为9600,为什么每个bit的时间是104,公式是什么

去查查波特率的含义就知道怎么算了

出0入0汤圆

 楼主| 发表于 2017-12-1 19:44:15 | 显示全部楼层
MAD_FISH 发表于 2017-12-1 19:23
去查查波特率的含义就知道怎么算了

好的,感谢提醒。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-3 08:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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