STM32串口通信详解(基本概念+易错点)

STM32串口通信详解

串口通信是 串行通信里的 异步方式   

涉及的几个基本概念

【同步通信和异步通信】

1.	同步和异步的区别:简单来说就是发送方和接收方按照同一个时钟节拍工作就叫同步,
	发送方和接收方没有统一的时钟节拍,各自按照各自的节拍工作就叫做异步。
	
2.	同步通信:通信双方按照统一的节拍工作,所以配合很好;一般需要发送方给接收方发送信息的同时
	发送时钟信号接收方根据发送方的时钟信号来接收数据。同步通信一般用在双方信息交换频率固定,或者经常通信.例如SPI、IIC通信。

3.	异步通信:又叫做异步通知,在双方通信的频率不固定时(有时3秒收发一次,有时3小时收发一次),
	不适合使用同步通信,而应该使用异步通信。异步通信时,接收方不必一直在意发送方,发送方只要在
	发送信息时,首先给接收方发送一个起始信号,接收方收到起始信号后认为后面紧跟着的就是有效信息,
	然后才开始接受信息,直到收到发送方发过来的结束信号。异步通信常用于不带时钟同步信号,例如USART、单总线。

【电平信号和差分信号】

1.	电平信号和差分信号是用来描述通信线路的传输方式。即如何在通信线路上表达0和1。
2.	电平信号:传输过程中,有一根参考电平线(通常是GND线)。然后信号线上的信号值,由信号线电平和参考线之间
	的电压差决定。
3.	差分信号:传输过程中没有参考电平,所以都是信号线。0和1的表达是通过信号线之间的电压差决定。   

总结:电平信号两根线之间的电平差容易受到干扰,传输不稳定;差分信号不容易受到干扰,因此传输质量比较稳定,
	现代通信一般使用差分信号传输,实际中差分信号传输还要更快一点。

并行接口和串行接口

1.	串行和并行主要是考虑通信线的根数,就是发送方和接收方同时可以传递的数据是多少。	
2.	譬如在电平信号下:1根参考电平线 和 1根数据线 一个周期可以传送一位二进制数据,如果有3根线(2根信号线和1根参考线)
	在一个时钟周期内,可以同时发送2位二进制数据。如果同时发送8位二进制数据就需要9根线。
3.	在差分信号下,2根线(彼此差分)可以同时发送1位二进制;如果需要同时发送8位二进制,需要16根线。
总结:	虽然并行接口比串行接口要快得多,但是串行接口使用的线数少,传输距离更远,成本也更低。

全双工、半双工、单工

1.	单工:就是单方向,只能一个设备发送一个设备接收,不能反过来。
2.	半双工:A和B通信,A和B都可以收发数据,但是同一时刻,数据只能有一个方向。
3.	全双工:同一时刻,两个设备之间可以同时收发数据。

串口通信涉及的基础概念

异步、电平信号、串行、全双工

  1. 异步:串口通信的 发送方接收方 之间没有统一的时钟信号。
  2. 电平信号:串口通信出现的时间较早,对于传输的速率要求不高,传输距离也不太远,所以即使是使用电平信号也可以正常通信,不会有太多的干扰。后来出现的传输协议都改成了差分传输,
  3. 串行通信:串口通信每次同时只能传输1个二进制数据。
  4. 全双工:同一时刻既可以接收数据 也可以发送数据。

TTL电平,RS232电平、RS485电平

  1. TTL电平:电平标准一般使用3.3V表示1,0V表示0;或者5V表示1,0V表示0。TTL电平通常用来在芯片之间进行通信,传输距离近。
  2. RS232电平:-3V-- -15V表示1;3V—15V表示0;常用于工业控制中,传输距离较远、抗干扰能力强;
  3. RS485电平:逻辑“1”以两线间的电压差为 +2~+6V 表示;逻辑“0”以两线间的电压差为 -2~-6V 表示。且该电平与TTL电平兼容,可方便与TTL 电路连接。
    注意:对于编程来说,无论是TTL,232,485电平之间是没有差异的,同样的程序可以任意使用电平方式,关键看实际情况使用哪种电平方式好。(TLL和RS232之间是不可以混接的,数据会出错,严重的可能烧坏芯片
通讯标准TTLRS232RS485
电平逻辑逻辑1:2.4V—5V 逻辑0:0V–0.5V逻辑1:-15V— -3V 逻辑0:+3V— +15V逻辑1:+2V-- +6V 逻辑0:-2V-- -6V
传输距离

波特率

  1. 比特率:衡量通讯性能的一个非常重要的参数就是通讯速率,通常使用比特率(Bitrate)来表示,即每秒传输的二进制位数,单位为比特每秒(bit/s)。
  2. 波特率:表示每秒传输了多少个码元码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元,例如:常见的通讯中用0V表示数字0,5V表示数字1,那么一个码元可以表示两种状态0或1;所以一个码元等于一个二进制比特位;此时波特率大小和比特率大小一致,如果在通讯传输中,有 0V、2V、4V以及 6V分别表示二进制数00、01、10、11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率
  3. 波特率的确定:理论上波特率在硬件允许范围内可以随意设定,但是由于通信中双方必须设定相同的波特率,如果波特率不一致双方根本无法通信。因此为了设备之间的兼容性,波特率不同随意指定,常用的波特率为9600和115200.

起始位、数据位、奇偶校验位、停止位

串口通信时,收发数据是一个周期一个周期进行的,每个周期传输N个2进制位,这一个周期叫做一个通信单元,一个通信单元由:起始位 + 数据位 + 奇偶校验位 + 停止位 组成。

  1. 起始位:表示发送方要开始发送一个通信单元;起始位的定义是串口标准事先指定的;是由通讯线上的电平变化来反映的。(电平由高变低为起始位,由低变高为停止位)
    在这里插入图片描述
  2. 数据位:是一个通信单元中要发送的有效信息是本次通信真正要发送的有效数据,串口一次发送多少位的有效数据是可以设定的,(一般可以选择6、7、8、9位)大多数情况下选择8位,因为我们通过串口发送的数据都是ASCII码编码的,而ASCII码中一个字符刚好是8位。
  3. 奇偶校验位:是用来给数据位进行奇偶校验的(把数据位逐个加起来,总和为奇数:奇偶校验位为1;总和为偶数:奇偶校验位为0)可以在一定程度上防止位反转。
  4. 停止位:的定义是串口通信标准事先指定的(发送完数据位和校验位后,电平由低变高表示停止位),常见的停止位有1位停止位,1.5位停止位,2位停止位,大多数情况下都是使用1位停止位。

总结:串口通信时因为是异步通信,所以通信双方必须事先约定好通信参数,这些参数包括波特率、数据位、奇偶校验位、停止位(串口通信中的起始位定义是唯一的,一般不同选择)

串口通信常见使用方法

三根线实现通信 RX+TX+GND

  1. 任何通信都需要信息传输载体,或者有线或者无线。
  2. 串口通信时有线通信,是通过串口线来通信的(可以使用一些无线串口模块如蓝牙模块实现无线通信)
  3. 串口通信线最少需要两根,一根GND,一根RX或TX,这样可以实现单工通信,使用三根线可以实现全双工通信
    在这里插入图片描述

收发双方事先定好通信参数

  1. 使用串口通信时要定好通信参数(波特率,校验位等)。
  2. 串口任何一个参数设置不同,都可能导致通信失败。
  3. 配置串口时当参数配置正确但是通信不正常,很有可能是时钟频率配置错误,这样即使波特率等参数一致,收发数据也失败。

总结

1.	波特率非常重要,收发双方的波特率一定要一致才能正常通信,如果波特率不一致还是能正常通信,很肯是时钟频率配置错误了,一定要改正 不然其他外设很可能也有问题。
2.	单片机只能处理二进制数,所以串口无论是发送数字、字符串、字符等 其实都是以二进制数进行发送的。
3.	串口一般设置数据位为8位,每一帧刚好发送一个字节。

目前只总结了这些,后续有新的理解,再继续添加笔记-2020-8-24夜

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值