常见的通信接口
本文图片大多选自B站江科大STM32入门教程
1、I2C和SPI的时钟是同步的,接收方可以在时钟信号的指引下进行采样。串口、CAN和USB没有时钟线,是异步通讯,异步通讯需要双方约定一个采样频率,并且要加一些帧头帧尾,进行采样位置的对齐。
2、单端信号:引脚的高低电平都是对GND的电压差,单端信号的双方必须共地(GND连在一起),故表中的前三个还需要有GND脚。USB有的是单端信号。
3、差分信号:差分信号是用两根线之间的电压差要表示输出信号的高低,差分信号的抗干扰能力强,传输距离远。
4、点对点:一般是两个设备之间进行通讯。
串口通信简介
串口通信的硬件电路
串口通讯的电平标准![](https://img-blog.csdnimg.cn/d82d844396324a1e9db2600f557ae2ec.png)
1、单片机直接产生的就是TTL电平信号。
2、使用RS485电平标准,通信距离可以达到上千米,而TTL电平和RS232电平只能传几十米。
3、以上三种电平标准都是串口常用的电平标准,都属于串口,串口一般使用异步通信。
4、硬件方面:需要其他的电平加电平转换模块就可以了。软件程序方面:以上三种电平的软件程序一样。
串口参数及时序
起始位:起始位为低电平。空闲状态是高电平,当电平为低时,设备就要开始接收数据了。
停止位:停止位为高电平,为下一个起始位做准备。
校验位:奇/偶校验,保证1的个数为奇数或者偶数。
奇偶校验只能在一定程度能检测出错误,如果两位都发生改变,奇偶校验就检测不出错误了。
CRC校验是一种校验能力较强的校验方式。
停止位:停止位的宽度可以设置(如下图)。
串口通讯的STM32外设与软件模拟
串口外设
STM32有串口外设可以自动发送和接收数据。STM串口外设的作用:按照串口协议来产生和接收高低电平信号,实现串口通信。
串口转TTL:可以将串口协议转为USB协议(用CH340G芯片),一头接电脑,一头接支持串口协议的芯片,能实现串口和电脑的通信了。
软件模拟
发送:定时(使用定时器,定时时间由波特率决定)写GPIO。
接收:定时读GPIO,接收的时候需要一个外部中断,检测到下降沿就开始定时采样数据。
串口协议总结
TX引脚输出定时翻转的高低电平,RX引脚定时读取引脚的高低电平,每个字节的数据加上起始位、停止位,可选的校验位,打包成数据帧,依次输出在TX引脚,另一端RX引脚依次接收,这样就完成了字节数据的传递。
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器
S是同步的意思,UART就是通用异步收发器,串口大多数是异步的。串口很少使用这个同步功能,STM32的USART同步模式,多了一个时钟输出,只支持时钟输出不支持输入,更多是为了兼容其他协议或特殊用途而设计的,并不支持两个USART进行同步通信。
其他协议:加了时钟之后和SPI协议特别像,有了时钟输出的串口就可以兼容SPI协议。
特殊用途:这个时钟可以做自适应波特率:接收设备不确定发送设备给什么波特率,就可以测量一下这个时钟的周期,计算得到波特率。
STM32串口外设发送/接收数据的详细过程
STM32串口外设框图
串口发送数据
硬件检测发送移位寄存器是否有数据在移位,没有移位时数据由发送数据寄存器移到发送移位寄存器,会置一个TXE(发送寄存器空)的标志位,判断这个标志位就可以知道是不是可以写下一个数据到TDR。TXE位置1时,数据其实还没有发送出去(数据还要一位一位移出去)。对数据寄存器进行写操作会对该标志位TXE清零。
串口接收数据
在接收控制器的控制下,一位一位移入接收移位寄存器,移完一帧数据,数据就会统一转运到接收数据寄存器,转移的同时,置一个RXNE(接收数据寄存器非空)的标志位,检查该标志位就可以知道是不是收到数据了,该标志位也可以申请中断。对数据寄存器进行读操作会对该标志位(RXNE)清零。
串口外设的硬件流控制设计
硬件流控制:防止数据发送过快导致接收数据不正确的设计。
nRTS:输出有个能不能接收数据的反馈信号,如果可以接收就向发送方的CTS发送低电平表示可以接收,请求对方发送。n表示低电平有效。如果此时STM32接收不过来就会发送高电平表示不能接收对方接收到之后,就会暂停发送,STM32用串口发送数据对方接收时也是同理。
USART的基本结构
发送寄存器每移位一次,同步时钟电平就跳变一个周期,指导外部接收。
STM32串口外设对串口数据采样
如果有噪声干扰,按照2:1的规则取数据,且噪声标志位NE置1。