USART(一般称串口,但是严格来说串口是一种通信接口):发送TX(Transmit Exchange)、 接收RX(Receive Exchange)
I2C:时钟SCL(Serial Clock) 、 数据SDA(Serial Data)
SPI:时钟SCL(Serial Clock) 、 主机输出数据脚MOSI(Master Output Slave Input)、主机输入数据脚MISO(Master Input Slave Output) 、片选CS(Chip Select)用于指定通讯对象
CAN:CAN_H、CAN_L 两个代表差分数据脚,用两个引脚表示一个差分数据
USB:DP / D+(Data Positive) 、 DM / D- (Data Minus) 也是一对差分数据脚。
全双工:通信双方能够同时进行双向通信。一般有两根数据线,发送、接收是分开的,使用时互不影响,例如:USART 、 SPI
半双工:一般只有一个数据线,例如I2C、CAN、USB,差分数据线是正负线组成一根数据线。
单工:只能从一个设备到另一个设备,不能反着来。
同步:接收方可以在时钟线的指引下直接采样信号。
异步:发送和接收方同时约定一个采样频率进行通信,并且还有帧头帧尾进行采样位置对齐。
单端信号:电平都是对GND的电压差,表示高低电平。单端信号双方必须共地。
差分信号:可以不共地,抗干扰性较强,传输速度和距离性能较优。
点对点:双方单独直接传输数据。
多设备:中间可以挂载多设备,比点对点多一个寻址的过程。
简单双向串口是两根通信线,复杂一点的串口通信有时钟引脚、硬件流控制引脚。
TTL、RS232传输距离最远几十米
RS485 传输距离可以非常远,抗干扰能力很强。抗干扰能力强是因为差分信号取的是两线压差,一般差分信号都是用双绞线传输,受到干扰两线同时升高或降低电压,不影响压差。
波特率是 码元的传输速率 比特率是 bit/s
在二进制调制下,一个码元等于一个bit,波特率等于比特率,单片机串口通信基本都是二进制的。所以是高电平表示1,低电平表示0,一位就是1bit
多进制调制下波特率和比特率是不相等的。
如果启用校验位:发送方会在发送数据之后补一个校验位,保证8位有效数据加上校验位会出现奇数个或偶数个1。奇校验,例如:0000 1111 校验位会补1,保证有奇数个1,如果是0000 1110 校验位会补0 ,保证有奇数个1。保证偶校验,8位有效数据加上校验位会出现偶数个1。方式同奇校验。但是这种校验方式有缺陷,如果数据传输中受到干扰,有效位里面有两位同时改变,则有效位奇偶性不变,校验不出传输错误。
SMT32有USART外设,发送数据时,外设根据发送数据自动置高低电平。也可以用软件模拟USART通信的波形。用定时器设置波特率来实现就可以。
USART可以分成两部分(发送和接收)
波特率发生器可以理解为一个分频器,分频72MHz时钟来产生脉冲。波特率常用9600 115200
同步模式就是两个设备之间连接时钟线,用来同步收发。
硬件流控制:发送和接收设备之间,引脚为nCTS nRTS两个脚连接,一般TX和nCTS配合,RX和nRTS配合,接收数据设备通过nRTS用来向发送设备的nCTS发送接收设备状态,置1则表示接收设备还未准备好,置0表示接收设备已准备好接收数据。可以防止接收设备因为数据处理慢导致数据丢失的问题。
IrDA是红外通信的通信协议。
LIN是局域网的通信协议。
USART1是APB2总线上的设备。
USART2、3 是APB1总线上的设备。
发送数据寄存器和接受数据寄存器是两个寄存器共用一个地址,发送数据寄存器只写,接受数据寄存器只读。都在数据寄存器DR内。
写入数据给发送数据寄存器后,会自动检查发送移位寄存器的状态,如果发送移位寄存器空闲状态,发送数据寄存器会立即传入数据给发送移位寄存器,如果非空闲状态则会等待空闲后立即传入。发送移位寄存器低位在前通信。
TDR和移位寄存器双重缓存保证数据帧发送之间无间隔,TDR寄存器内的数据一旦转入到移位寄存器,标志位TXE(TX Empty)会立马置位1,立马后面的数据会传入到TDR。无论移位寄存器是否完成移位。当接收移位寄存器接收完成后会立即将数据传入RDR,同时置标志位RXNE(RX NOT Empty),读取这个标志位为1时,就可以读走RDR里面的数值了。
发送移位寄存器是向右移位,低位先行。接收移位寄存器也是向右移位,把先接收到的低位数据向右移。
串口传输规定低位先行,所以接收移位寄存器会把第一位放在最高位,然后第二位数据过来的时候第一位往右移,知道数据帧完成8位。
SCLK时钟信号只配合发送端使用,只可以输出不可以输入, 两个USART之间不可以实现同步的串口通信。这个时钟信号的用途是兼容别的协议,
USART1是挂载在APB2总线上的设备。APB1总线上的外设(除定时器以外)时钟频率最大36MHz。
USART2、3 是挂载在APB1总线上的设备。APB2总线上的外设时钟频率最大72MHz。
USARTDIV预分频系数由右侧的的数值来决定,数值内分为左侧的整数部分和右侧的小数部分。因为有一些波特率用整数除不尽,所以预分频系数支持小数点后四位,预分频更加精确。
TE、RE是控制发送和接收的波特率使能控制位。
输入采样信号会以波特率的16倍频率进行采样,一位数据有16个采样时钟。
起始位检测:从检测到低电平信号开始,第3、5、7次采样信号如果全为0则通过起始位检测,如果里面存在一个1,则通过起始位检测并置NE标志位1,如果有两个及以上高电平信号,则忽略第一次采样的低电平信号,认定起始位检测第一次低电平信号是噪声。
通过起始位检测之后,第8、9、10次连续采样内如果有两个低电平信号以上,则后续每一位采样都采8、9、10位作为每一位的采样频率。如果连续三次采样都是0或者都是1则那一位就是0或者1,如果不全为0或者1,则按照2:1的比例,占比多的则为此位的电平信号,并置NE标志位1有噪声干扰。
补充:
状态寄存器 SR(Status Register)存放各种标志位
数据寄存器 DR(Data Register)存放最关键的数据
控制寄存器 CR(Config Register)存放各种配置参数