myshworks 发表于 2017-12-1 16:53:08

UART通信过程的理解

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

砂山老妖 发表于 2017-12-1 17:03:38

异步通讯接收使用起始位来表明传输开始,有校验位的话,停止位的位置是11位,判断该位的值,为高说明完整接收,为低则帧错误

strongking 发表于 2017-12-1 17:14:28

我的理解如下:串口接收数据的过程中,在没有数据的时候,RX一直为高,当有数据过来的时候,会有一个下降沿出现,标明有数据来了,然后就可以开始接收数据了,数据接收完后会有一个停止位表示数据已经全部接收,之后RX又一直保持高电平,直到有下一次数据过来。我的理解是对的吗?
    是的
还有,我在网上看到说如果没有接收到停止位,说明帧出错,那么,如何判断有没有接收到停止位呢(停止位为1,数据接收完后RX也是一直为1,如何区分)?
    MCU带UART功能就会有硬件去处理;除非是用IO口模拟串口接收,如波特率为9600bps,那么每个位时长为104us,当你检测到IO下降沿开始104us后的104us为最1位数据,在下个104us第为第2位数据,
以此类推,到第9位如果没有奇偶位就是停止位,判断104us内是否为高电平就行。

myshworks 发表于 2017-12-1 17:14:37

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

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

security 发表于 2017-12-1 17:17:53

你的理解是对的。
异步通信的话,靠每个 bit 维持的时间(对应于 9600 而言,每个 bit 的时间约为 104 us),来实现数据传输识别。
在停止位对应的 bit 的维持时间内,需要检测到高即可。

security 发表于 2017-12-1 17:25:04

myshworks 发表于 2017-12-1 17:14
停止位的位置是固定的吗?数据位不是可能是7位或者8位吗

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

砂山老妖 发表于 2017-12-1 17:31:13

数据格式根据应用定死就行了,你还要随机变化吗?

huangqi412 发表于 2017-12-1 17:34:58

数字电路的世界,都是围绕时钟一拍拍来,   UART一半会16倍或多少倍过采样,以波特率为基本节拍。
你按节拍一步步走逻辑。

wye11083 发表于 2017-12-1 18:10:33

strongking 发表于 2017-12-1 17:14
是的

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

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

su33691 发表于 2017-12-1 18:39:39

楼上说的都挺好,学习了。

myshworks 发表于 2017-12-1 18:44:21

砂山老妖 发表于 2017-12-1 17:31
数据格式根据应用定死就行了,你还要随机变化吗?

哈哈,是我不懂,谢谢

myshworks 发表于 2017-12-1 18:45:56

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

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

myshworks 发表于 2017-12-1 18:47:29

security 发表于 2017-12-1 17:17
你的理解是对的。
异步通信的话,靠每个 bit 维持的时间(对应于 9600 而言,每个 bit 的时间约为 104 us) ...

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

anjiyifan 发表于 2017-12-1 19:16:02

停止位主要是为了保证起始位的下降沿。没有停止位保证在开始发送下一字节时的电平变为高的话,下一字节起始位的下降沿就无从谈起了。
如果检测不到停止位,那说明通信可能存在问题。

MAD_FISH 发表于 2017-12-1 19:23:03

myshworks 发表于 2017-12-1 18:47
波特率为9600,为什么每个bit的时间是104,公式是什么

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

myshworks 发表于 2017-12-1 19:44:15

MAD_FISH 发表于 2017-12-1 19:23
去查查波特率的含义就知道怎么算了

好的,感谢提醒。{:lol:}
页: [1]
查看完整版本: UART通信过程的理解