本小节主要介绍串口通信的基本内容,纯理论介绍,为后续小节做基础铺垫。
目标:
- 了解 RS232 与 TTL 的区别
- 掌握串口通信协议的数据包组成
- 掌握串口通信中的使用要点
往期
串口简介
串口通信是一种设备间常用的通信方式,市面上也有非常多的串口传感器,例如 GPS、Modus 温湿度传感器等等,同时电子工程师也喜欢用串口进行系统调试,通过串口输出日志内容,方便跟踪系统的运行。
对于串口通信,想必各位同学一定听过网口,他就是一种串口。
而对于 RS485、RS232 这些也都是串口,这两种在工业中用的比较多,而对于单片机(STM32F103)板子上的接口,仅支持 TTL 电平串口。
RS232 与 TTL
RS232 与 TTL:这两种的区别除了接口不一样,最大的区别是区分高低电平的电压不一样。
举个例子,RS232 高电平的取值是-15V 到 -3V
,而 TTL 的高电平取值在 2.4V-5V
。
RS232 接口
RS232 一般有 9 个引脚,也有 25 个的,称为 DB9 和 DB25,常见的是 DB9,也就是上图的这种
具体介绍参考:rs232接口_RS232串口通信:接口定义、标准接法详细说明,一看就懂了-CSDN博客
TTL 电平接口:
TTL 电平接口比较简单,一般只需要接 3 根线:RX、TX、GND
- RX:数据接收
- TX:数据发送
- GND:地,用于电平校准
我们只需要使用一个 TTL 转 USB 模块(如上图),就可以将单片机输出的 TTL 电平串口信息发送到 PC 上,在单片机上我们也可以看到有 TX、RX 的标志。
特别注意的是需要将 RX、TX 需要反接,也就是 CH340 模块上的 TX 需要接到 STM32 单片机上的 RX,CH340 上的 RX 需要接到 STM32 单片机上的 TX。
UART 协议
在讲到 UART 协议之前,需要提到以下几个词:
- 波特率:指传输速率,每秒钟传输的位数,也就是每一个码元的的持续时间不一样,必须设置,常见的有 4800、9600、115200 等
- 起始信号:通信开始前发起一个起始信号,每次通信都有,称为起始位,必须有
- 有效数据:有效数据在每一次传输的时候一般是 8 位,也可以是 5、6、7 位,必须有
- 校验位:校验位在可以是奇校验、偶校验、无校验,也就是可以没有
- 停止信号:停止信号可以有 0.5、1、1.5、2 个数据为表示,停止位只能是高电平,必须有
下图是一个包括起始位、数据为、校验位、停止位的数据包的时序图
特别注意
通信的双方必须要约定好以下内容:
- 波特率
- 停止位
- 校验位
- 数据位
如果波特率不一致,会导致乱码,举个例子:
假发送方设置为 115200,接收方设置为 9600,在上面我讲了,波特率指的是一秒钟传输多少位,如果波特率不一致,那么发送方每秒会发送 115200 个位,接收方一秒只接受 9600,这个时候就会出现数据错误,导致输出乱码的问题,如果这个问题细究下去,就是数据采样的时间点的问题了,此处不展开了。
结语
在本小节我们简单介绍了串口 UART,同时介绍了 TTL 串口的使用要点,并对 UART 通信的数据包进行讲解。在下一小节,我们将使用 STM32 进行串口通信。