江科大笔记—USART串口

通信接口介绍

在这里插入图片描述
USART:TX(数据发送脚)、RX(数据接收脚)

I2C:SCL(时钟)、SDA(数据)

SPI:SCLK(时钟)、MOSI(主机输出数据脚)数据发送、MISO(主机输入数据脚)数据接收、CS(片选,用于指定通信的对象)

CAN:CAN_H、CAN_L(差分数据脚,用2个引脚表示差分数据)

USB:DP(也叫D+)、DM(也叫D-)也是一对差分数据脚。

全双工:指通信双方能够同时进行双向通信。发送线路和接收线路,互不影响。

半双工:只有一个数据线,I2C、CAN、USB。CAN和USB两根差分线组合成一根线。

单工:数据只能从一个设备到另一个设备,不能反着来。

同步:I2C、SPI有单独的时钟线,所以同步,接收方可以在时钟的指引下进行采样。

异步:USART、CAN、USB没有时钟线,需要双方约定一个采样频率,并还需加帧头帧尾等,进行采样位置的对齐。

单端:USART、I2C、SPI,引脚的高低电平都是对GND的电压差,所以单端信号通信双方必须要共地,就是把GND接在一起。所以这3个引脚前必须加GND引脚。

差分:靠2个差分引脚的电压差来传输信号,是差分信号,在通信的时候,不需要GND。不过USB协议也有一些地方需要单端信号,所以USB还是需要供地的。

串口通信

在这里插入图片描述
第一个是USB转串口模块,上面有个芯片,型号是CH340,这个芯片可以把串口协转换成USB协
议,它一边是USB口,可以插在电脑上,另一边是串口的引脚,可以和支持串口的芯片,接在一起这样就能实现串口和电脑的通信。

中间这个图是一个陀螺仪传感器的模块,可以测量角速度、加速度这些姿态参数。它左右各有4个引脚,一边是串口的引脚,另一边I2C的引脚。

右边这个图是蓝牙串口模块,下面4个脚是串口通信的引脚,上面的芯片可以和手机互联,实现了手机遥控单片机的功能。

硬件电路

在这里插入图片描述
上面的VCC,如果两个设备都有独立供电,那VCC可以不接。
如果其中一个设备没有供电,比如这里设备1是STM32,设备2是蓝牙串口模块,STM32有独立供电,蓝牙串口没有独立供电,需要把蓝牙串口的VCC和STM32的VCC接在一起,STM32通过这根线,向右边的子模块供电,当然,供电的电压也需要注意一下,要按照子模块的要求来,这就是供电要求。

TX是发送,RX是接收,是一个设备的发送接另一个设备的接收 。

如只需要设备1向设备2单向通信,那就可以只接一根TX到RX的线,另一根不接,这就是单工的通信方式。

电平标准

根据通讯使用的电平标准不同,串口通讯可分为TTL标准及RS-232标准,见表 TTL电平标准与RS232电平标准

在这里插入图片描述

在这里插入图片描述
RS485电平标准的通信距离可以上千米,而TTL和RS232电平就十几米。单片机低压小型设备,使用的是TTL电平。

串口参数与时序

在这里插入图片描述
如何用1和0,来组成我们想要发送的一个字节的数据,上面时序图就是串口发送一个字节的格式。

介绍:串口中,每一个字节都装载在一个数据帧里面,每个数据帧由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。
第一个是数据位有8位,代表一个字节8的位,在右边的数据帧里面,还可以再数据位的最后面加一个奇偶校验位,这样数据位总共9位,其中有效载荷是前8位,代表一个字节,校验位跟在有效载荷后面,占1位,这就是串口数据帧的整体结构。

参数介绍:

波特率:如果每隔1秒发送一位,那么接收方也必须每隔1秒接收一位。如果接收方过早接收,则可能会重复接收某些位;如果接收方过晚接收,则可能会错过某些位。因此,发送方和接收方必须约定好传输速率。
这个速率参数,就是波特率。波特率是每秒传输码元的个数,单位是码元/s,或者叫波特(Baud)。
比特率是每秒传输的比特数,单位是bit/s,或者叫bps。在二进制调制下,一个码元就是一个bit,此时波特率也就等于比特率,在单片机的串口通信,一般使用的二进制调制,也就是高电平表示1,低电平表示0,一位就是1bit。
在这里插入图片描述
那反应到波形上,比如我们双方规定波特率为1000bps,那就表示,1s要发1000位,每一位的时间就是1ms,发送方每隔1ms发送一位,接收方每隔1ms接收一位,这就是波特率,它决定了每隔多久发送一位。

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

数据位,表示数据帧的有效载荷,1为高电平,0为低电平,低位先行。
比如我要发送一个字节,是0x0F,那就首先把0F转换为二进制,就是0000 1111,然后低位先行,所以数据要从低位开始发送,也就是1111 0000,像这样,依次放在发送引脚上。所以说如果你想发0x0F这一个字节数据,那就按照波特率要求,定时翻转引脚电平,产生一个这样的波形就行了。
有效数据:在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。

在这里插入图片描述

校验位,它的用途是,用于数据验证,是根据数据位计算得来的。这里串口,使用的是一种叫奇偶校验的数据验证方法,奇偶校验可以判断数据传输是不是出错了。如果数据出错了,可以选择丢弃或者要求重传,校验可以选择3种方式,无校验、奇校验和偶校验。
无校验,就是不需要校验位,波形就是左边这个,起始位、数据位、停止位,总共3个部分。

在这里插入图片描述

奇校验是起始位、数据位、校验位、停止位。要求有效数据和校验位中“1”的个数为奇数,比如一个8位长的有效数据为:01101001,此时总共有4个“1”, 为达到奇校验效果,校验位为“1”,最后传输的数据将是8位的有效数据加上1位的校验位总共9位。
  
  偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数, 比如数据帧:11001010,此时数据帧“1”的个数为4个,所以偶校验位为“0”。
  0校验是不管有效数据中的内容是什么,校验位总为“0”,1校验是校验位总为“1”。
  奇校验,就是1的个数为奇数,如3个1或5个1。
偶校验,就是1的个数为偶数。

当然奇偶校验的检出率并不是很高,比如如果有两位数据同时出错。奇偶特性不变,那就校验不出来了,所以奇偶校验只能保证一定程度上的数据校验。
  如果想要更高的检出率,可以了解一下CRC校验,这个校验会更加好用,当然也会更复杂。我们这个STM32内部也有CRC的外设,可以了解一下,那到这里,串口的时序我们就了解了。

说明:我们这里的数据位,有两种表示方法,一种是把校验位作为数据位的一部分,分为8位数据和9位数据,其中9位数据,就是8位有效载荷和1位校验位。
另一种就是把数据位和校验位独立开,数据位就是有效载荷,校验位就是独立的1位,像我这上面的描述,就是把数据位和校验位分开描述了,在串口助手里也是分开描述,总之,无论是合在一起,还是分开描述,描述的都是同一个东西,这个应该也好理解。

串口实际波形

在这里插入图片描述

总结一下就是,TX引脚输出定时翻转的高低电平,RX引脚定时读取引脚的高低电平。每个字节的数据加上起始位、停止位、可选的校验位,打包为数据帧,依次输出在TX引脚,另一端RX引脚依次接收,这样就完成了字节数据的传递,这就是串口通信。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值