1.通信接口
通信的目的是为了将数据从一个设备传输到另一个设备,为了完成数据的传输,才有了通信协议,用以制定通信的规则,使得通信的双方按照协议规则进行数据的收发
STM32的通信协议有如下几种
全双工通信意味着可以实现双方同时发送和接受数据,一般来说全双工的通信协议,都有两根通信线,一根用来发送,一根用来接收,例如USART和SPI(发送和接收相互不影响)时钟信号只有在具有单独时钟线的情况下才是同步的,若是没有时钟线,双方就只能约定一个通信频率,因此这时为异步通信
所有的单端信号的通信协议都需要共地,后面的CAN和USB则依靠的时电压差,按原理来讲,是不需要接地的。使用差分可以极大的提高的抗干扰性能,多设备需要一个寻址的过程
2.串口通信
串口通信线路简单,成本低,应用广泛,可实现两个设备之间的相互通信,单片机的串口一般使用在单片机和单片机,单片机和电脑,单片机和各个模块之间的互相通信,以此来提高单片机的硬件实力
串口通信由于有两根通信线,因此时全双工模式,而且由于电平信号为单端信号,因此必须要接地。(通信线之间要交叉连接),VCC接口需要看供电情况
若是只需要向一个方向传输数据,可以只接一根通信线,这样的话,为单工
当电平标准不一致时,需要增加电平转换芯片
电平标准:代表着数据1和数据0的表达方式,是人为规定的电压和数据的对应关系
常见的标准有三种TTL(+3.3V和+5V表示1,0表示0),RS232电平(-3~-15V表示1,+3~+15V表示0),RS485(两线之间的压差+2~+6V为1,-2~-6V为0)
一般我们使用的比较多的时TTL电平,USB这种串口用的RS485
串口参数和时序
波特率:串口通信的速率(还有一个比特率,经常混用)每隔多久发射一位
起始位:标志一个数据帧的开始,固定为低电平
数据位:数据帧的有效载荷,1为高电平,0为低电平(低位先行)
校验位:用于数据验证,通过数据位的计算得来(有效载荷的后面一位)奇偶校验
停止位:用于表示数据帧之间的间隔,固定为高电平
3.USART 通用同步/异步收发器
USART时STM32的支持串口通信的硬件外设,根据数据寄存器的一个字节数据自动生成数据帧,然后通过TX引脚发送,也可以自动接收RX引脚被的数据帧时序,拼接为一个字节的数据并将其存放于数据寄存器中
USART有自带的波特率发生器,最高4.5Mbits/s(其实就是一个分频器)
可配置的数据位长度为8/9,停止位长度为0.5/1/1.5/2
可选择无校验,奇校验和偶校验
USART可发送时钟信号(兼容别的协议),但无法接收,拥有硬件流控制,避免了数据传输过快而被覆盖丢失的问题,此外还支持DMA(数据转运),智能卡,LrDA,LIN(其它协议,与串口类似)
在写代码时首先需要开启端口和USART的时钟,配置端口(tx,rx)若是使用USART1的话就是PA10和PA9两个端口
再通过库函数的结构体直接配置USART即可
库函数中比较重要的函数有
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
第一个是发送数据,第二个是接收数据(本质上就是写和读DR寄存器的值)DR寄存器有四个寄存器,控制了发送和接收(这两个函数的标志位都会自动清0)
其他的函数除了常见的配置函数,就只有几个扩展功能的函数