一些基本概念
串行/并行
串行:数据逐位按顺序传输,一个位一个位的传输。并行:数据各位通过多条线同时传输。这个好理解看下面的图就很清晰。
单工/半双工/全双工
单工:数据只能有一个传输方向。半双工:数据可以沿两个方向进行传输,但要在不同时间进行。全双工:数据可以同时双向传输。如下面图所示
同步/异步通信
同步通信:发送方和接收方共用同一条时钟收发数据。这样可以确保数据在发送方和接收方之间进行同步。
异步通信:没有时钟信号,他通过在数据前后加入起始位或者终止位,通过纠错编码,解码等方式保证数据正确性。
注意这里是某种方式,存在多种异步通信方式
波特率
比特率:每秒传输的比特数,bit/s。波特率:每秒传输的码元数,Baud
这里通俗的解释一下码元,码元就是一个脉冲信号,但是这个脉冲信号可能携带多个bit的数据,可能1,可能2等。这里举个例子,比如你想传递2种信息(2进制),那么需要1bit就行,因为0和1;每个码元占据1个bit位;比如你想传递4种信息(4进制),那么需要2bit,因为00,01,10和11;每个码元占据2个bit位。官方点就是4种不同的振幅或者频率或者相位,因为实际的信息传输都是用振幅,频率,相位等来表示信息的。码元说白了就是你以怎样的形式去定义你要发的信息,传输多个bit,还是一个码元。 M进制码元,携带log2(M)比特信息。
比特率=波特率*log2(M),这个公示也就很好解释了,每秒传输的码元数*每个码元的bit数=每秒传输的bit数
常见的串行通信接口
这个是视频里面所讲的
串口通信协议
数据是按照数据帧的形式传输的,一个数据帧包括起始位+数据位+(检验位)+停止位。起始位标志一个数据帧的开始,固定是低电平,持续一个位的时间;数据位是有效的数据,根据情况传0传1;检验位是检测发送的数据的,有奇偶校验位等;停止位是高电平,隔开数据帧之间。
注意,传输时是低位先行,高位后行,比如发送0x55,1010 1010,那么发送是 起始位 0101 0101 停止位
这里看一下手册上的协议示意图
这里可以看到,除了正常的数据帧还有空闲帧和断开帧,空闲帧就是恒1,如果持续了一个数据没有发送数据,也就是空闲帧,就是告诉接收方发送数据完毕了,这里有一种空闲中断,就是使用空闲帧对数据及时处理。断开帧通常被发送者用来表示通信的中止或者终止。这种帧可以让接收者知道通信已经结束,并且可以停止等待进一步的通信。
串口外设
如上图所示,左边的引脚部分就是TX和RX,还有一些别的功能的引脚,右边就是相关的寄存器,可以看到数据寄存器DR,这里看TDR和RDR的数据手册。
可以知道,实际上DR是分开的两个寄存器,一个TDR,一个RDR,同一个地址但是硬件上是分开的。并且可以看到,数据寄存器和移位寄存器之间是并行的,按照前面的并行来理解。移位寄存器在接收和发送时是串行接收的,这个要注意一下,不要混淆。
这几个寄存器也涉及到一些状态的寄存器操作
参考视频