STM32
直播中

kmno4

12年用户 956经验值
私信 关注
[问答]

串口异步通信的接收与发送数据的过程是怎样的

串口通信可以分为哪几种?

串口通信与并口通信有何区别?

串口异步通信的接收与发送数据的过程是怎样的?

回帖(1)

陈佳敏

2021-12-6 14:26:22
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从“数据输入寄存器”中读得的信息,只是有效数字,不包含起始位、校验位、停止位信息。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分