STM32串口协议

STM32串口协议

通信接口

通信的目的:将一个设备的数据传送到另一个设备,拓展硬件系统
通信协议:指定通信的规则,通信双方按照协议规则进行数据收发

有些功能是STM32内部没有的,比如我们想要蓝牙无线遥控的功能,想要陀螺仪加速度计测量姿态的功能,STM32没有,所以只能外挂芯片来完成,那外挂的芯片,它的数据都在STM32外面,STM32如何才能获取到这些数据呢,这就需要我们在这两个设备之间,连接上一根或多根通信线,通过通信线路发送或者接受数据,完成数据交换,从而实现控制外挂模块和读取外挂模块数据的目的,所以在这里,通信的目的是,将一个设备的数据传送到另一个设备,单片机有了通信的功能,就能与众多别的模块互联,极大地拓展了硬件系统,

通信协议,通信的目的是进行信息传递,双方约定的规则就是通信协议。

在这里插入图片描述

  • USART串口,引脚是TX(TXD),RX(RXD),TX(Transmit Exchange)是数据发送脚,RX(Receive Exchange)是数据接收脚。
  • I2C通信 引脚是SCL,SDA,SCL(Serial Clock)是时钟,SDA(Serial Data)是数据。
  • SPI通信 引脚是SCLK、MOSI、MISO、CS SCLK(Serial Clock)是时钟 MOSI(Master Output Slave Input)是主机输出数据脚 MISO(Master Input Slave Output)是主机输入数据脚 CS(Chip Select)是片选,用于指定通信的对象。
  • CAN通信 引脚是CAN_H CAN_L 这两个是差分数据脚,用两个引脚表示一个差分数据。
  • USB通信 引脚是DP(Data Positive)和DM(Data Minus) 或者叫D+和D-,也是一对差分数据脚。

双工模式

  • 全双工 就是指通信双方能够同时进行双向通信,一般来说全双工的通信都有两根通信线,比如串口一根TX发送、一根RX接收,SPI,一根MOSI发送、一根MOSO接收,发送线路和接收线路互不影响。
  • 半双工 只有一根通信线,双方能够互相通信,但每次只能一方发送另一方接收,不能同时发送和接收 相当于对讲机。
  • 单工 数据只能从一个设备到另一个设备,不能反着来。

时钟特性

  • 异步
  • 同步

电平特性

  • 单端信号 也就是他们引脚的高低电平都是对GND的电压差,所以单端信号通信的双方必须要共地,就是把GND接在一起,所以说USART、I2C、SPI还应该接一个GND引脚,不接GND是无法通信的。
  • 差分信号 靠两个差分引脚的电压差来传输信号的,在通信的时候,可以不需要GND,但是USB协议里面也有一些地方需要单端信号,所以USB还是需要共地,使用差分信号可以极大地提高抗干扰特性,所以差分信号一般传输速度和距离都会非常高。

设备特性

  • 点对点
  • 多设备

串口通信

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地拓展了单片机的应用范围,增强了单片机系统的硬件实力。

硬件电路

在这里插入图片描述

  • 简单双向串口通信有两根通信线(发送端TX和接收端RX)

  • TX与RX要交叉连接

  • 当只需单向的数据传输时,可以只接一根通信线

  • 当电平标准不一致时,需要加电平转换芯片

电平标准

  • 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

  • TTL电平:+3.3V或+5V表示1,0V表示0

  • RS232电平:-3~-15V表示1,+3~+15V表示0(可以抗较强干扰)

  • RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

串口参数及时序

  • 波特率:串口通信的速率

  • 起始位:标志一个数据帧的开始,固定为低电平

  • 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

  • 校验位:用于数据验证,根据数据位计算得来

  • 停止位:用于数据帧间隔,固定为高电平

在这里插入图片描述在这里插入图片描述

  • 数据帧:串口中,每一个字节都装在一个数据帧里面,每个数据帧都由起始位、数据位和停止位组成,这里数据位有8个,代表一个字节的8位,还可以在数据位的最后,加一个奇偶校验位,这样数据位总共就是9位,其中有效载荷是前8位,代表一个字节,校验位跟在有效载荷后面,占1位。

  • 波特率:由于串口一般是使用异步通信,所以需要双方约定一个通信速率,比如我每隔1s发送一位,那你就得每隔1s接收一位,如果你接收快了,那就会重复接收某些位,如果接收慢了,就会漏掉某些位,所以发送和接收必须要约定好速率,这个速率就是波特率。

波特率:每秒传输码元的个数,单位是码元/s,或者直接叫波特(Baud)。

比特率:每秒传输的比特数,单位是bit/s,或者叫bps。

在二进制调制的情况下,一个码元就是一个bit,此时波特率就等于比特率,像我们单片机的串口通讯,基本都是二进制调制,也就是高电平表示1,低电平表示0,一位就是1bit,所以说这个串口的波特率,经常会和比特率混用,如果是多进制调制,那波特率和比特率就不一样了。

  • 收发流程:首先,串口的空闲状态是高电平,也就是没有数据传输的时候,引脚必须置高电平,作为空闲状态,然后需要传输的时候,必须要先发送一个起始位,这个起始位必须是低电平,来打破空闲状态下的高电平,产生一个下降沿,这个下降沿,就告诉接收设备,这一帧数据要开始了。果没有起始位,当我们发送8个1的时候,数据线就一直都是高电平,没有任何波动,无法知道我们是否发送了数据。所以必须要有一个固定为低电平的起始位,产生下降沿,来告诉接收设备,我要发送数据了。同理,在一个字节数据发送完成后,必须要有一个停止位,这个停止位的作用是,用于数据帧间隔,固定为高电平,同时这个停止位,也是为下一个起始位做准备的,如果没有停止位,当数据最后一位是0的时候,下次再发送新的一帧,是不是就没法产生下降沿了。起始位固定为0,产生下降沿,表示传输开始,停止位固定为1,把引脚恢复成高电平,方便下一次的下降沿。

  • 数据位:低位先行,比如我们想发送一个0x0F 首先把0F转换成二进制 0000 1111,然后低位先行,所以数据要从低位开始发送,也就是1111 0000,依次放在发送引脚上。

校验位:串口使用的是一种叫奇偶校验的数据验证方法,奇偶校验可以判断数据传输是不是出错了,如果数据出错了,可以丢弃或者要求重传,校验可以选择三种方式

  • 无校验
  • 奇校验 那么包括校验位在内的9位数据会出现奇数个1 比如传输0000 1111 目前总共是4个1,是偶数个,那么校验位就需要再补一个1,连同校验位就是0000 1111 1,总共5个1,保证1为奇数,如果数据是0000 1110 此时3个1 是奇数个,那么校验位就补0,连同校验位就是0000 1110 0 总共是3个1,1的个数为奇数。发送方在发送数据后,会补一个校验位,保证1的个数为奇数,接收方,在接收数据后,会验证数据位和校验位,如果1的个数还是奇数,就认为数据没有出错,如果在传输中,因为干扰,有一位由1变成0,或者由0变成1了,那么整个数据的奇偶特性就会发生变化,接收方已验证,发现1的个数不是奇数,那就认为传输出错,就可以选择丢弃,或者要求重传。
  • 偶校验

奇偶校验的检出率不是很高,比如如果有两位数据同时出错,奇偶特性不变,那就校验不出来了,所以奇偶校验只能保证一定程度上的数据校验,如果想要更高的检出率,可以了解以下CRC校验。

串口时序

实际波形如下

在这里插入图片描述

在STM32中,根据字节数据翻转高低电平,是由USART外设自动完成的 RX引脚接收,读取高低电平,也可以由USART外设自动来完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YRr YRr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值