目录
一、USART串口协议
1.1、串口协议
- 引脚:
- USART:TX(数据发送脚)、RX(数据接收脚)
- I2C:SCL(时钟)、SDA(数据)
- SPI:SCLK(时钟)、MOSI(主机输出数据脚)、MISO(主机输入数据脚)、CS(片选,用于指定通信对象)
- CAN:CAN_H、CAN_L(这两个是差分数据脚,用两个引脚表示一个差分数据)
- USB:DP、DM(差分数据脚)
- 通信模式:
- 全双工:通信双方能够同时进行双向通信,一般来说,全双工通信都有两根通信线,比如串口,一根TX发送,一根RX接收,SPI,一根MOSI发送,一根MISO接收,发送线路和接收线路互不影响
- 半双工:是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一个方向上的传输存在。
- 单工:数据只能从一个设备到另一个设备
- 时钟:
- 同步:有单独的时钟线为同步,例如I2C、SPI
- 异步:没有单独的时钟线,需要通信双方约定一个采样频率,并且还需要加一些帧头和帧尾等,进行采样位置的对齐,如USART、CAN、USB
- 电平:
- 单端信号:它们引脚的高低电平都是对GND的电压差,所以单端信号通信的双方必须要共地,如I2C、USART、SPI
- 差分信号:靠两个差分引脚的电压差来传输信号,如CAN、USB,不过USB协议里面也有一些地方需要单端信号,差分信号的抗干扰能力强,所以差分信号一般传输速度和距离都比较远
- 设备特性:
- 点对点:如USART、USB
- 多设备:可以在总线上挂载对个设备
1.2、串口通信
1.3、硬件电路
1.4、电平标准
1.5、串口参数及时序
二、USART外设
2.1、USART简介
- 同步模式只是多了个时钟CLK的输出
- 硬件流,比如A设备有个TX向B设备的RX发送数据,A设备一直在发,发的太快了,B处理不过来,如果没有硬件流控制,那B只能抛弃新数据或者覆盖原数据,如果有硬件流控制,在硬件电路上,会多出一根线,如果B没有准备好接收,就置高电平,如果准备好了,就置低电平,A收到B反馈的信号,就只会在B准备好的时候才发数据,如果B没有准备好,那数据就不会发送出去
- USART1是APB2总线上的设备,USART2和USART3是APB1总线上的设备
2.2、USART框图
2.2.1、引脚部分
- 有TX和RX,这两个是数据发送和接收引脚
- 下面的其他引脚是智能卡和IrDA通信的引脚,我们一般用不到
- 一般TX和RX引脚与寄存器可以这么认为(引脚旁边的那个框不用去管)
2.2.2、数据寄存器
- 上图为串口的数据寄存器,发送或接收的字节数据就存在这里
- 上面那两个数据寄存器,一个是发送数据寄存器(TDR),一个是接收数据寄存器(RDR),这两个寄存器占用同一个地址,在程序上,只表现为一个寄存器,就是数据寄存器,但是硬件中是分成了两个寄存器,一个用于发送TDR,一个用于接收RDR,TDR是只写的,RDR是只读的,当你进行写操作时,数据写到TDR,当进行读操作时,数据从RDR读
- 下面那两个寄存器,一个用于发送,一个用于接收、
- 发送移位寄存器的作用就是,把一个字节的数据一位一位地移出去,正好对应串口协议的波形的数据位,举个例子,比如在某时刻在TDR中写一个0X55这个数(01010101),那么此时硬件检查到你写入数据了,它就会检查,当前发送移位寄存器是不是有数据正在移位,那么写入到TDR的寄存器就会全部移动到发送移位寄存器,准备发送,当数据从TDX移动到发送移位寄存器时,会置一个标志位,叫TXE(TX Empty),我们检查这个标志位,如果置1了,我们就可以在TDR中写入下一个数据,注意的是,TXE置1时,数据其实没有发出去,只要数据从TDR转移到发送移位寄存器,TXE就会置1,然后发送移位寄存器就会在下面发生器控制的驱动下向右移位,然后一位一位的发送到TX引脚(低位先行),当数据移位完成,新的数据就会再次自动地从TDR转移到发送移位寄存器,如果移位没有完成,TDR的数据就会等待,一旦移位完成,就会立刻转移过来,有了TDR和移位寄存器的双重缓存,可以保证连续发送数据的时候,数据帧不会有空闲,提高了工作效率
- 接收端也是类似,数据从RX引脚通向接收移位寄存器,在接收器控制驱动下,一位一位的读取RX电平,先放在最高位,然后向右移,移动8次就能接收一个字节了,同样,因为串口协议规定是低位先行,所以接收移位寄存器是从高位往低位移动,之后,当一个字节移动完成后,这一个字节的数据就会整体地转移到接收数据寄存器RDR里来,在转移的过程中,也会置一个标志位,叫RXNE(RX Not Empty),接收数据寄存器非空,当我们检测到RXNE置1之后,就可以把数据读走
2.2.3、控制部分
- 发送其控制发送,接收器控制接收
注:唤醒单元和时钟了解一下就行