本文仅代表我个人观点,算是个人总结吧,相信也会随着学习的不断深入对本文不断改进。
他们的全称为:
可以看到USART是可以有同步功能的,这里的同步就是增加了时钟线,在stm32的cube的配置中就体现为这个智能卡了,这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。
下面是UART的配置,相比而言就是没有智能卡的部分,不过我们一般都是把串口当作异步串口来使用,所以这里不用特别在意
异步同步
这样来看,IIC和SPI是同步通信(是由时钟来决定的,不停发送和连续接收的同步比特流),UART是异步通信的,不过虽然UART不需要回应,但是他在任意时刻都可以发送字符,所以他需要起始位和终止位,这样才能告诉别人什么时候开始,什么时候结束,便于接收方正确接收数据。
这里一般是采用RS232的标准,RS232是比较老的标准了,它规定了信号的用途、通讯接口以及信号的电平标准,常用的接口一般是DB9接口,RS232和现在用的串口区别就在于一个电平标准,下面是野火stm32教程中的示意图。
他们的电平标准如下所示:
标准DB9的接口如下所示(注意看他这里的RX和TX的对调),现在一般只使用 RXD、 TXD 以及 GND 三条信号线,直接传输数据信号。
前面已经说过是协议传输的方式,需要有开始停止,传输的数据包一般为:
起始位-主体数据-校验停止数据
下面是一些重要的参数说明:
我们需要读取串口的数据的话需要读取数据寄存器,在stm32中为DR寄存器,这是个16位的寄存器,一般是低9位有效(就是前面提到的有效数据长度一般是8位或者9位,这里是否有效由控制寄存器CR1的M位来决定,为0时8位,为1时是9位)
同样的DR寄存器既然是数据寄存器,数据存在发送和接收两种情况,因此也有两个部分,分别是:
在实际的发送过程中,先把TDR的内容发送到移位寄存器,然后移位寄存器再一位位的发送数据。
然后在补充说明下前面提到的CR1寄存器,CR1寄存器是控制寄存器,控制的内容包括
发送的过程中,是低位在前,高位在后,具体发送过程为:先发送一个空闲帧(这里为一个数据帧长度的高电平),接下来开始向DR寄存器写入要发送的数据,写入最后一个数据后,等待UART状态寄存器的TC位置1,表示传输完成,如果这个过程CR1的TCIE置1,就会产生中断,下面补充几个非常重要的标志位:
如果是接收器的话,大体和上述部分类似,就是一些名字换了而已。
下面来说下IIC协议,其实这方面我之前已经写过文章记录了,不过那个是偏应用的,这里本篇文章就算是偏理论吧!
iic有两根线,SDA为数据输入输出线,SCL为时钟信号线,因为这里有时钟来同步信号,所以IIC是同步通信。
iic的一大特点在于他是多主多从的一种总线通信方式,一个iic总线上可以由多个主机,同样的也可以有多个从机,这是其他很多总线都不会有的,同时iic对数据要求很高,因为他每发送一个数据就要一个应答(要结束的时候发送非应答NACK)。
硬件层上总线是的布局,但就是注意下接个上拉电阻,因为要保证空闲状态是上拉的状态。
协议层如下所示,下面写数据(每个data都要跟一个应答,最后是非应答)
下面是读数据(每个data都要跟一个应答,最后是非应答)
整体的话大概就是如下:(每个data都要跟一个应答,最后是非应答)
起始信号和应答信号(SCL为高,SDA下降沿为起始,SCL为高,SDA上升沿为结束)
应答信号
那么数据应该是怎么读取的呢,很简单就是一句话:SDA在SCL的每个时钟周期进行数据传输,每个时钟周期传输一位数据
时钟周期这里可以近似理解为方波,就是不断地上下变化的,这样才是一个周期嘛,然后不是整个时钟周期都在读取数据的,这里要注意就是只在SCL为高电平的时候读取数据,也可以理解为SCL为高电平时候,数据有效,这个时候读取SDA的电平状态,SDA为高电平就是1,反之就是0,而SDA为低电平的时候,这个时候SDA就可以进行电平转换了,比如这个时候转换了一下那么读取的就是10,如果没转换,就是11,这样一共进行八次,就完成一个字节的数据传输了!
下面来进行SPI的总结,这个我也有相关文章介绍,可以查看我之前的文章,还是一样的,比较偏应用,这里对理论进行解读
SPI的特点是高速,全双工,同步通信,SPI和iic不一样,同一条总线上,最多只能有一个SPI主机,可以有多个从设备,但是绝对不能有多个主机,SPI的读写均由主设备发起,多从机的时候,主机对从机的选择由各个从机的片选信号来决定。
下面有一张图描绘了SPI的通信协议,挺难看的。
说实话SPI一个挺容易的协议的,被这么一弄,整的挺复杂的,下面我手绘了一张图,相信能更容易看懂SPI协议
看通信不还是看数据,看时钟吗,这里和IIC一样的有时钟线,但是多了一个数据线,对啊,要不人家怎么是全双工总线呢,同步传输啊,那数据传输不还是在时钟周期上来捕获数据线上的数据吗,那就完事了。
SPI还有一点就是他多了两个东西,让这个过程变得复杂了一点点,真的就是复杂了一点点,这两个就是时钟相位还有极性
因为这两个东西,SPI可以有四种工作模式,下面对这两个东西(CPOL为时钟极性,CPHA为是时钟相位)的作用进行介绍:
这里的有效啥意思呢: