STM32单片机通信-串口通信学习(0)

 

STM32单片机通信-串口通信编程实例学习(1)

1.串口通信

串行接口 (Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,占用芯片引脚资源少,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种

单工:数据只能支持在一个方向上传输

半双工:允许数据在两个方向上传输,但是一个时刻内只能允许数据在一个方向上传输,实际上是一种切换反向的单工通信。l

全双工:允许数据同时在两个方向上传输,因此全双工通信时两个单工通信方式的集合,但是要求发送设备和接收设备都有两个独立的接收和发送能力。

2.与并口通信区别

串口形容一下就是一条车道,假如传输1个字节数据,那么串口需要连续传送8次,至少需要一根信号线。

而并口就是有8个车道同一时刻能传送8位(一个字节)数据,自然最少需要8根信号线。

3.通信方式

同步通信:个人理解就是带时钟同步信号传输。例如SPI,IIC通信接口,这种方式时根据系统时钟的触发来保证数据的准确性。

异步通信:不带时钟同步信号,例如 UART(通用异步收发器),单总线,这种通信方式需要收发双方规定通信协议才能保证数据的准确性。

如下图:

通信标准

引脚说明

通信方式

通信方向

UART

TXD:发送端

RXD:接受端

GND:公共地

异步通信

全双工

单总线

1-wire)

DQ:发送/接受端

异步通信

半双工

SPI

SCK:同步时钟

MISO:主机输入,从机输出

MOSI:主机输出,从机输入

同步通信

全双工

I2C

SCL:同步时钟

SDA:数据输入/输出端

同步通信

半双工

4.串口异步通信接收过程

(1)开始通信时,信号线为空闲(一般是高电平1),当检测到由1到0的跳变时,代表着开始对“接收时钟”计数。

(2)当计数到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是“起始位”B,而不是干扰信号。

(3)接收端检测到起始位后,16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据。若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0。(16是从STM32手册中波特率计算公式推导出来)

(4)再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据。….,直到全部数据位都输入。

(5)如果设置了校验位,则检测校验位P。

(6)接收到规定的数据位和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志。若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器。若校验错,在状态寄存器中置奇偶错标志。

(7)本幀信息全部接收完,把线路上出现的高电平1作为空闲位。

(8)当信号再次变为低电平0时,开始进入下一幀数据的检测。

5.串口异步通信发送数据过程

发送端以“发送时钟”和“波特率因子”决定一位的时间长度。相当于是接收端的数据检测周期。

(1)当串口设备初始化后,或者没有数据需要发送时,发送端输出逻辑1,即空闲位。

(2)当需要发送数据时,发送端首先输出逻辑0,作为起始位。

(3)然后发送端首先发送D0位,直到各数据位发送完。

(4)如果需要的话,发送端会输出校验位。

(5)最后,发送端输出停止位(逻辑1)。

(6)如果没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量。如果还有信息需要发送,转入第(2)步。

 

总之发送和接收都是以起始电平0开始和结束标志电平1结束。在起始和结束位之间则就是数位奇偶校验位。

起始位、校验位、停止位、空闲位的信号,由“发送移位寄存器”自动插入。在接收方,“接收移位寄存器”接收到一帧完整信息(起始、数据、校验、停止)后,仅把数据的各位送至“数据输入寄存器”,即CPU从“数据输入寄存器”中读得的信息,只是有效数字,不包含起始位、校验位、停止位信息。

猜你喜欢

转载自blog.csdn.net/yuupengsun/article/details/107011586