STM32串口通信的几种方式与介绍

通信的几种方式与介绍

通信目的:将一个设备的数据传送到另一个设备,扩展硬件系统

通信协议:制定通信的规则,通信双方安装协议规则进行数据收发

  1. USART引脚为TX和RX,TX是数据发送脚,RX是数据接受脚
  2. I2C通信引脚是SCL和SDA,SCL是时钟,SDA是数据
  3. SPI的通信引脚,SCLK是时钟,MOSI是主机输出数据脚,MISO是主机输入数据脚,CS是片选,用于指定通信对象。
  4. CAN通信的两个引脚是差分数据脚。
  5. USB通信的两个引脚也是差分数据脚。

通信引脚:

        前三个由于是单端通信,通信双方必须共地,所以通信引脚应该再加上GND引脚。

双工:

        一般有两个通信引脚的都是全双工,串口就是一根TX发送,一根RX接收,而USB和CAN是两根数据引脚组合成一根通过差分信号进行数据发送。

单工:

        数据只能从一个设备到另一个设备。

时钟:

        时钟可以分为同步和异步,同步通信就是通过时钟信号告诉接收方什么时候过来采集数据I2C和SPI有单独的时钟线,所以是同步的,接收方可以在时钟信号的指引下进行采样。

        剩下串口,CAN,USB没有时钟线就需要双方约定一个采样频率,并且还要加一些帧头帧尾等,进行采样位置的对齐。上面三个都是单端信号,也就是引脚的高低电平都是对GND的电压差。所以都需要共地,差分信号在通信的时候不需要GND,使用差分信号可以抗干扰特,一般传输距离和速度都比较好。

设备:

        点对点只能两个设备进行通信,多设备则需要一个寻址的过程,确定通信的对象。

常见的通信设备:

        左边为USB转串口模块,它板载的CH340芯片能将串口通信转化为USB通信方式。

        中间是蓝牙模块,引脚为串口通信引脚,可以通过蓝牙芯片与手机互连。实现手机与单片机通信进行遥控。

        右边是陀螺仪模块,左边是串口引脚,右边是I2C引脚。

串口通信电路:

  1.  简单双向串口通信有两根通信线(发送端TX和接收端RX)
  2. TX与RX要交叉连接当只需单向的数据传输时,可以只接一根通信线变为单工通信
  3. 当电平标准不一致时,需要加电平转换芯片,一般都是TTL电平

电平标准:

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

  1. TTL电平:+3.3V或+5V表示1,0V表示0
  2. RS232电平:-3~-15V表示1,+3~+15V表示0
  3. RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

串口标准:

数据转换关系:

  • bit就是位,也叫比特位,是计算机表示数据最小的单位
  • byte就是字节
  • 1byte=8bit
  • 1byte就是1B表示1字节
  • 1个字符=2字节
  • 1KB=1024B
  • 字节就是Byte,也是B
  • 位就是bit也是b
  • 转换关系如下:1KB=1024B,1B= 8b

串口数据帧结构:

         如图串口数据帧结构,这就是串口发送一根字节的格式,串口中每个数据都装在一个数据帧里面,每个数据帧都包括一个起始位,数据位,停止位组成,还可以在数据帧的最后加一个奇偶校验位。这样数据位总体就是9位,有效载荷为前8位代表一个字节。

数据传输原理:

        首先需要约定波特率,串口是异步通信,波特率是约定的速率,波特率的单位是码元/s,还有一种叫法为比特率,比特率单位是bit/s,或者叫bps,在二进制调制的情况下,波特率就是比特率,一个码元就是1bit,单片机一般都为二进制调制,所以也可以叫比特率。若规定波特率为1000bps,那就表示1s要发送1000位,每一位的时间就是1ms,传输1字节(byte)的时间就是起始位加上数据位加上停止位为10ms,根据转换关系速率为100B/s,约等于0.1KB/s

        当没有数据传输时为空闲状态,数据线为高电平,开始传输数据时,需要先发送一个起始位,这个起始位必须为低电平,打破空闲状态的高电平,产生下降沿,也就告诉数据接收放我要开始传输这一帧的数据了。如果没有起始位,当传输8个1数据的时候,电平始终为高电平。同样的在1个字节数据发送完成后,必须要有一个停止位,这个停止位用于数据帧间隔,固定为高电平,同时停止位也是为下一个起始位做准备。

        数据位为低位先行,当传输一个数据为0x0F(0000 1111)的时候,发送时候为低位先发就是1111 0000这样发送。

        校验位主要是验证数据的准确性,分为无校验,奇校验,偶校验,如果采用奇校验,那么所有的数据帧里的1的个数都是奇数个1,例如传输1111 0000时,校验位就会补1,也就是111100001,偶校验同理。接收方会根据这个校验来验证数据是否准确。如果传输中有一个位置因为干扰由0变为1,那么接收方验证后就会认为传输出错,就可以选择丢弃或者要求重传。当有两位数字同时出错,那么采用这两种校验方法就不会检查出错误。如果想要提高检出率,可以了解CRC校验,STM32也内置了CRC校验外设。

串口总结:

  1. 波特率:串口通信的速率
  2. 起始位:标志一个数据帧的开始,固定为低电平
  3. 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
  4. 校验位:用于数据验证,根据数据位计算得来
  5. 停止位:用于数据帧间隔,固定为高电平

串口波形图:

  

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值