常用嵌入式通信协议总结

常用通信协议总结

基础概念

在开始学习前我们需要知道一些基础概念例如:
1.什么是同步,什么是异步?
二者就是有没有时钟信号线的区别。
2.什么是串行,什么是并行?
就是在发送或者接收数据的时候用了几根线。比如常见的并行使用8根线,串行采用1根线。8根线传输一个byte(8bits)只需要一个时钟周期,而1根线传输一个byte至少需要8个时钟。
3.信号的电气协议是什么东西?
电气特性就是’0’,'1’分别用多大的电平表示。常见的电气协议有TTL、RS232、RS422、RS485

举例:
1.TTL中高电平对应3.3V或5V,低电平对应GND
2.RS232是负逻辑,所以高电平用-15~-5V,低电平用5~15V
这边提到正逻辑一般指正电压表示逻辑’1’(TTL),而负逻辑就是用负电压表示’0’(RS232)

常见的通信协议

在嵌入式开发中最常用的通信协议有:
1.UART异步收发传输器(Universal Asynchronous Receiver/Transmitter)
2.IIC集成电路总线(Inter-Integrated Circuit)
3.SPI串行外设接口(Serial Peripheral Interface)

1.UART

特性
  1. 从异步收发传输器中我们可以提取出关键字 “异步“,异步表示UART数据传输过程不需要时钟线,只需要信号线(RXD、TXD)。
  2. 再结合UART传输和接收不再同一根线上,所以UART可以同时发送接收,也就是UART支持全双工
  3. 由于UART采用异步、串行,这就意味这数据要一位一位的传输,且由于没有时钟线进行同步,所以波特率发生器要花更多的时间通过来进行数据同步。
  4. 再者由于UART采用TTL电平标准,所以传输距离最远为2米

总结:
速率不快、距离短、可全双工、依靠波特率发生器进行数据同步、硬件接线2~3根。在这里插入图片描述
#pic_center)

图1 全双工UART接线图

如果只需要MSP432向STM32发送信号,那么只需要接MSP432的TXD和STM32的RXD,如图2

在这里插入图片描述

图2 半双工UART接线(只能MSP432向STM32发送)

同理,STM32也可以主动发送消息给MSP432,如图3
在这里插入图片描述

图3 STM32向MSP432单向通信
数据格式(嵌入式面试重点)

了解完这些后,我们再看一看UART的数据格式,我们从常用的串口助手入手:
在这里插入图片描述

图4 VOFA+串口参数配置界面
  • 起始位 1bit
  • 数据位数(5、6、7、8)(默认为8bits)
  • 奇偶校验位(默认不进行校验)
  • 停止位数(1、1.5、2)(默认1bit)
  • 空闲位:数据线在没有传输数据的时候保持高电平,也就是空闲位
    在这里插入图片描述
图5 UART数据格式图
波特率

串口通信最重要的就是传输速率,UART传输速率由波特率决定(在应用时一般只要配这个就行,数据格式这些不会去管按串口通信默认的就行)。很多时候串口助手接收到的数据乱码就是因为波特率不匹配,当然也可能是数据格式不对。
这里重点介绍一下波特率的概念简单来说就是每秒传输的bit位数
bits/s
有些人可能要说了,你把比特率和波特率混淆了。是的,但因为我们大部分都是用二进制来传输数据,所以波特率==比特率,注意(因为是二进制,所以比特率=波特率)

2.IIC

IIC(Inter-Integrated Circuit)是一种内部整合电路的称呼,它是一种串行通讯总线,IIC总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL。

IIC总线上可以挂很多设备,包括多个主设备和多个从设备(外围设备)。在多主机应用中,当多个主机同时想占用总线时,会产生总线裁决问题。这时,IIC通过总线仲裁,以决定哪台主机控制总线。

连接到IIC总线上的器件都具有唯一的地址,主机与其它器件间的数据传输可以是由主机发送数据到其它器件,这时主机即为发送器,总线上收数据的器件则为接收器。起始信号和终止信号用于表示数据传输的开始和结束。

每个接到IIC总线上的器件都有唯一的地址。主机与其它器件间的数据传输可以是由主机发送数据到其它器件,这时主机即为发送器,总线上收数据的器件则为接收器。 在起始信号产生之后,总线就处于被占用的状态,在终止信号产生之后,总线就处于空闲状态。

另外,连接到IIC总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。上拉电阻一般在4.7k~10k之间。

特性
  1. 双向通信: I2C支持双向数据传输,即主设备既可以发送数据给从设备,也可以接收从设备发送的数据。注意双向通信和全双工的区别,全双工可以同时收发,这里的双向通信可以进行收发,但是不能同时
  2. 多主模式: I2C允许多个主设备连接到同一条总线上,通过仲裁机制来选择唯一的主设备进行通信,其余的主设备则成为从设备。
  3. 多从模式: I2C总线可连接多个从设备,每个从设备都有唯一的7位或10位地址,主设备通过地址来选择要与之通信的从设备。
  4. 速率灵活: I2C总线的速率可以根据应用需求进行灵活调整,常见的速率有100 kHz、400 kHz和1 MHz。
  5. 低成本: I2C总线只需要两根线来进行通信,降低了硬件成本和复杂性。
仲裁机制(选看)

在IIC通信协议中,仲裁机制是一种关键的特性,用于解决多个设备同时尝试访问总线时可能出现的冲突。以下是IIC仲裁机制的几个关键特点:

  • 线与机制:在多主机环境下,IIC总线具备“线与”的逻辑功能。这意味着,只要有一个节点发送低电平,总线上就会表现为低电平。这为仲裁过程提供了一种有效的机制。
  • SDA回读机制:当总线被启动后,每个主机在发送一个数据位时都要对自己的输出电平进行检测。如果检测到的电平与自己发出的电平一致,主机就会继续占用总线。这种方法确保了主机发送的数据位与从SDA线上读取到的数据位是一致的。
  • 低电平优先机制:当两个主控设备同时向总线发送数据时,会发生总线竞争。IIC总线具有多主控能力,可以对这种竞争进行仲裁。如果两个主控器发送的数据位不同,那么发送低电平的主控器将获胜,因为低电平是优先级最高的。如果两个主控器发送的数据位相同,那么会继续比较它们的数据位,直到有一个主控器发送的数据位发生变化。

IIC的一大特点在于他是多主多从的一种总线通信方式,一个IIC总线上可以有多个主机,同样的也可以有多个从机,这是其他很多总线都不会有的,同时IIC对数据要求很高,因为他每发送一个数据就要一个应答(要结束的时候发送非应答NACK)
起始信号: SCL为高电平时,SDA由高电平向低电平跳变,开始传输数据。
结束信号: SCL为高电平时,SDA由低电平向高电平跳变,结束传输数据。
在这里插入图片描述

图6 起始信号和结束信号

数据在SCL低电平的时候变化
在这里插入图片描述

图7 数据变化条件(SCL为低电平)
IIC通信实例

现在我们从AT24C02出发来看一下IIC具体是怎么通信?
在开始前,我们假设有这么几个IIC底层函数

void IIC_Start(void);     				// 起始信号
void IIC_Stop(void);      				// 终止信号
bit IIC_WaitAck(void);    				// 等待回应
void IIC_SendAck(bit ackbit);  			// 发送应答信号
void IIC_SendByte(unsigned char byt);  	// 发送字节
unsigned char IIC_RecByte(void);   		// 接收字节

在这里插入图片描述

图8 IIC写流程
#define AT24C02ADDR 0x50   //设备地址
#define ADDR   0x00   // 要写入数据的地址
void AT24C02_byte_write()
{
	IIC_Start();  						// 起始信号
	
	IIC_SendByte(AT24C02ADDR << 1);  	
	// 发送设备地址,设备地址7位,最低为为读写标志位,
	// 又因为是写操作,所以最后一位置0
	IIC_WaitAck();    					// 等待回应
	
	IIC_SendByte(ADDR);					// 发送要操作的存储空间地址
	IIC_WaitAck();    					// 等待回应

	IIC_SendByte(DATA);					// 在DATAADDR地址中写入数据0x66
	IIC_WaitAck();    					// 等待回应
	
	IIC_Stop(void);      				// 终止信号
}

在这里插入图片描述

图9 IIC读流程
char AT24C02_byte_read(char addr)
{
	char recdata=0x00;
	IIC_Start();  						// 起始信号
	IIC_SendByte(AT24C02ADDR << 1);  	
	// 发送设备地址,设备地址7位,最低为为读写标志位,
	// 又因为是写操作,所以最后一位置0
	IIC_WaitAck();    					// 等待回应
	
	IIC_SendByte(addr);					// 发送要操作的存储空间地址
	IIC_WaitAck();    					// 等待回应

	IIC_Start();  						// 起始信号
	IIC_SendByte(AT24C02ADDR << 1 || 0x01);  	
	// 发送设备地址,设备地址7位,最低为为读写标志位,
	// 因为这次是读操作,所以最后一位置为1
	IIC_WaitAck();    					// 等待回应

	recdata=IIC_RecByte(); 
	IIC_SendAck(1);  			// 发送应答信号
	
	IIC_Stop(void);      				// 终止信号
	return recdata;
}

这就是IIC的读写流程,不同从设备可能会有点不同,但是都差不多。

3.SPI

串行外设接口(Serial Peripheral Interface,SPI)是一种高速的,全双工,同步的通信总线,由Motorola公司推出。它被广泛应用于微控制器、存储器和其他外围设备之间的通信,是一种常见的同步串行接口技术。

特性

SPI优点包括:

  1. 支持全双工通信:SPI支持两个设备之间同时进行数据传输,提高了通信效率。
  2. 通信简单:SPI的通信协议相对简单,数据传输速率快,且数据传输可靠性较高。
  3. 数据传输速率快:SPI支持高速数据传输,其速率可以根据具体应用需求进行配置。
    SPI的缺点主要表现在:

没有指定的流控制和应答机制,因此数据传输的可靠性和稳定性受到一定影响。也就是说,如果数据在传输过程中出现丢失或错误,SPI没有提供相应的解决方案。
SPI的特点包括:

  1. 高速、同步、全双工、非差分、总线式:这些特点使得SPI在某些特定应用场景下,比如高速数据传输和实时性要求较高的场景,表现出色。
  2. 主从机通信模式:SPI支持主从机通信模式,即一个主机(Master)控制数据传输,多个从机(Slave)接收数据。这种模式下,主机会定时产生时钟信号,然后通过这个信号来同步数据的传输和接收。

总的来说,SPI是一种常见的通信协议,被广泛应用于各种需要高速、同步、全双工通信的场合。

通常SPI通过4个引脚与外部器件相连:
● MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
● MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
● SCK:串口时钟,作为主设备的输出,从设备的输入
● NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。
在这里插入图片描述

图10 SPI接线图

(图片源自b站UP主:爱上半导体)

四种工作模式

SPI拥有四种工作模式,由时钟极性CPOL和时钟相位CPHA控制。

SPI ModeCPOLCPHA
0(00)00
1(01)01
2(10)10
3(11)11

在这里插入图片描述

图11 SPI不同工作模式时序图

(图片源自b站UP主:爱上半导体)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: stm32f103是一款32位的单片机芯片,常用嵌入系统和物联网设备中。在stm32f103的串口通信功能中,通过串口可以实现与上位机的通信。 串口通信协议是指不同设备之间传递数据所遵循的一种规定和约定。对于stm32f103与上位机通信常用协议有UART、RS232、RS485等。 UART(通用异步收发传输)是一种常用的串口通信协议,在stm32f103中有多个串口接口可以用于UART通信。UART通过发送和接收数据帧来实现通信。通常,上位机会发送一帧数据给stm32f103,然后接收单片机返回的数据。 RS232是一种常见的串口通信协议,使用基于电压的信号进行通信。RS232在物理层和电气层面上定义了通信规范,可以在较长距离上进行通信。 RS485是一种多点通信的串口通信协议常用于多个设备之间的通信。RS485比RS232更适合多个设备之间的通信,可以在1200米的距离上进行通信。 当stm32f103与上位机进行通信时,通信双方需要事先约定好使用的通信协议,包括数据传输的格通信速率、数据位数、校验位、停止位等参数的设置。 总之,stm32f103通过串口与上位机进行通信时,需要根据具体需求选择合适的串口通信协议,并在通信过程中遵循相应的协议规范和参数设置。这样才能确保通信的稳定和可靠。 ### 回答2: STM32F103是一款32位的ARM Cortex-M3处理器,具有很多功能丰富的外设模块,其中包括串口(USART)模块,用于与上位机进行通信。 串口通信协议是一种用于在通信设备之间发送和接收数据的规则集合。为使STM32F103与上位机进行通信,我们需要理解如何使用正确的串口通信协议。 首先,我们需要选择适当的串口通信和参数设置。STM32F103的串口模块支持多种通信,包括UART、USART、LIN和IrDA。在选择模时,需要考虑通信的要求和上位机的支持能力。 然后,我们需要配置串口的参数,包括波特率、数据位、停止位和校验位等。这些参数必须与上位机的配置相匹配,以确保数据可以正确地传输和解析。 在STM32F103上编程时,我们可以使用相关的库函数或驱动程序来配置串口并实现通信。例如,在HAL库中,可以使用以下函数进行串口配置和操作: 1. `HAL_UART_Init()`:用于初始化串口模块。 2. `HAL_UART_Transmit()`:用于向上位机发送数据。 3. `HAL_UART_Receive()`:用于接收上位机发送的数据。 此外,我们还需要定义一种上位机通信协议来组织数据的传输和解析。例如,可以使用常见的协议,如ASCII、Modbus或自定义协议。其中,ASCII协议将数据以ASCII码的形发送和解析,而Modbus协议是一种通用的串行通信协议,支持多种数据类型和功能码。自定义协议可以根据特定的需求来定义数据传输的格和解析规则。 最后,在STM32F103上编写完整的通信程序时,需要根据协议规范实现数据的解析和处理逻辑,以实现与上位机的稳定通信总结来说,实现STM32F103与上位机的通信涉及选择适当的串口模和参数,配置串口及相关库函数的调用,定义上位机通信协议以及编写数据处理逻辑。通过合理的设计和编程,可以实现可靠的STM32F103与上位机的通信。 ### 回答3: STM32F103是一款高性能的单片机,具有多个串口接口可以用于与上位机进行通信。在与上位机通信时,需要确定通信协议,以便双方能够正确地交换数据。 首先,STM32F103的串口通信协议可以选择使用UART(通用异步收发器)协议。UART协议是一种串行通信协议,通过一条数据线和一条时钟线来实现数据的传输。在使用UART协议时,需注意以下几点: 1. 波特率:双方需要约定好相同的波特率,波特率决定了数据传输的速率。常用的波特率有9600、115200等。 2. 数据位:可以选择使用7位或8位数据位。一般情况下,8位数据位使用更为普遍。 3. 停止位:可以选择使用1位或2位停止位。一般情况下,使用1位停止位即可。 4. 校验位:可选择使用奇校验、偶校验或无校验。校验位用于检测数据传输过程中的错误。 5. 流控制:可以选择使用硬件流控制(如RTS/CTS)或软件流控制(如XON/XOFF)来控制数据的传输速度和数据的流动。 上位机通常通过串口调试助手等工具与STM32F103进行通信。具体的通信协议可以根据需要进行约定,例如可以约定一条命令由特定的起始字节、命令内容和校验位组成,从而实现双方的数据交换和通信。 总之,STM32F103通过串口可以与上位机进行通信通信协议的选择以及具体通信规则需要双方协商确定。以上是关于STM32F103串口与上位机通信协议的说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值