提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
作者只是刚刚接触嵌入式没多久的新手,这第一篇文章是抱着抛砖引玉的想法。如有错误或讲述不明确的地方希望能有大佬多加斧正。
一、TTL, 232,与485之间的关系
首先先做一个简单的概念区分。串行通信是一个很大的概念,串口通信则是一种相对十分具体的通信方式。SPI,I2C,USB,串口通信都属于串行通信的一部分。真正区分串口通信和SPI,I2C,USB等的是通信时序。与USB,SPI不同,串口通信使用的是串口通信时序。换句话说,采用串口通信时序的都可以被称为广义的串口。
而如果要理解串口通信时序这一概念,就必须先理解通信接口标准的组成。通信接口标准由通信时序和电平标准两个部分组成,如图:
RS485和232的构成则如下图:
RS485,232接口标准都采用了串口通信时序,因此有了俗称的485,232串口这种说法。
这里也深入介绍一下串口通信时序,首先串口通信属于串行通信的范畴,因此遵从一次一个bit的传输方式。同时串口通信是异步通信,不需要在收发双发之间建立统一的时钟信号(无论是哪种串口上面都没有CLK)。空闲时串口传输线持续输出高电平1,直到发送方发送一个0通知传输开始。然后传输8个bit的数据,传输完之后再传输一位校验位,最后发送1表示停止。
这张WIKI上面的图显示的是数据位为7bit 的情况
(By Aeroid - Own work MIL-STD-188-100, pg. B-8, Fig 3, 1972. (different scan), CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=127125356)
以一般比较常用的9600波特率,8数据位,无校验,1停止位协议发送'O'举例,O的ASCII码位0x4F,二进制为01001111,小端(LSB)传输格式如下
(引用自Serial Communication - SparkFun Learn )
接下来简单介绍一下232电平标准和485电平标准
232与485传输“0”字符(LSB)
(引用自Standard RS-485)
找不到很漂亮的TTL,232,485同时出现的图,这里就先介绍一下232和485,232电平标准中-12V~-3V为0,+3~+12V为1。而485电平标准中AB线差值+0.2V~+5V为1,-0.2V~-5V为0。二者在传输“0”时形成的波形完全是反相的。具体内容在本文中不作引申,大家只要知道两者的电平标准完全不一样就行,TTL同理。
TTL电平示例
(引用自Serial Communication - SparkFun Learn )
二、USB和UART
平常有时也会听到UART串口和COM串口这两种说法。
串口的名称对应为串行通信接口。UART串口和COM串口的解释主要在接口这个部分上,这两个是通讯接口,但不是通信标准,而上一个部分中提及的所有传输方式都是通信标准。
串口在PC电脑和一般电子设备上指的是COM,在单片机上指的就是UART。COM特指台式计算机或一些电子设备上的D-SUB外形的串行通信口,采用(注意是采用)的是232电平标准。但是COM如今已经被USB取代,一般通过USB映射实现COM。UART则是实现串口收发的逻辑电路,采用的是TTL电平标准。因此这两种说法并无不可,只是不要和前面的标准混为一谈就行。
举例
在了解了上述概念后可以过一遍电脑与单片机通过485连接的过程。已知电脑上的USB采用的是USB电平标准,单片机UART采用的是TTL电平标准,用一根USB转 485的线到底实现了怎么样的转换过程。
从单片机这端出发,芯片自带的UART电路采用TTL电平。第一步就是通过485芯片(一般常见的是MAX485,正点原子的F103精英板上使用的是SP3485)将TTL电平转为485电平协议。485电平通过A,B端传输之后再通过USB转RS485芯片(一般情况下这种芯片都是可以转换多种电平的,如CH340,FT232RL)输入电脑。