一、通讯的基本概念
计算机通信是指将计算机技术和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。按照数据传输方式的不同,可以分为串行通信和并行通信两类。
1、串行通讯
特点: 数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种。
2、并行通讯
特点: 多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高。
3、串行通讯与并行通讯对比
4、传输模式(单工、半双工、全双工)
二、USART—串口通讯
串口(全双工)通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。
1、物理层
根据通讯使用的电平标准不同,串口通讯可分为 TTL 标准及 RS-232 标准。
在目前的工业控制使用的串口通讯中,一般使用 RXD、 TXD 以及 GND 三条信号线,直接传输数据信号。
2、协议层
串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成。
(1)波特率
串口异步通讯中由于没有时钟信号,所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码。
波特率是指每秒钟传送二进制数码的位数,以bit/s(bps)为单位。
⚫ 常用的波特率有: 9600、 19200、 38400、 57600和115200;
⚫ 波特率为115200, 表示每秒传输115200位,且每一位数据在数
据线上持续时间为Tbit = 1/115200 ≈ 8.68us。
(2)起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
(3)有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长。
(4)数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、 0 校验(space)、 1 校验(mark)以及无校验(noparity)。
2、异步串行通信的数据接收过程
接收过程的本质是数据采集,假设接收端的采样时钟是波特率的16倍。
① 接收过程由起始位的下降沿启动;
② 接收端等待8个时钟周期,以便建立一个接近比特周期中间的采样点;
③ 接收端等待16个时钟周期,使其进入第一个数据位周期的中点;
④ 第一个数据位被采样并存储在接收寄存器中;
⑤ 串口模块在采样第二个数据位之前等待另外16个时钟周期;
⑥ 重复此过程, 直到所有数据位都被采样和存储;
⑦ 由停止位的上升沿使数据线返回到空闲状态。
3、USART与UART
STM32 芯片具有多个 USART 外设用于串口通讯,它是 Universal Synchronous Asynchronous Receiver and Transmitter 的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。有别于 USART,它还有具有 UART 外设(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。
USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个 USART 通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。
二、IIC通讯
I2C(同步半双工)通讯协议(Inter-Integrated Circuit)是由 Phiilps(飞利浦) 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、 CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
1、物理层
I2C 通讯设备之间的常用连接方式如下图所示
它的物理层有如下特点:
(1) 它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式400kbit/s ,高速模式下可达 1Mbit/s,但目前大多 I2C 设备尚不支持高速模式。
(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。
2、协议层
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:起始信号、停止信号和应答信号。
(1)通讯的起始和停止信号
起始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
//软件模拟 IIC 起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda 线输出
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;//START:when CLK is high,DATA change form high to low
delay_us(4);
IIC_SCL=0;//钳住 I2C 总线,准备发送或接收数据
}
停止信号: SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。
//产生 IIC 停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda 线输出
IIC_SCL=0