单片机常见通讯方式理解与总结

单片机常见通讯协议理解与总结

协议类型 USART I2C SPI CAN
最大通信速度 fPCLK/16 400kHz fPCLK/2 1Mbps
连接单元数 32 7/10位地址 NSS片选引脚数量 理论无限
总线类型 手拉手串联 树型1对多 树型1对多 环形总线
数据线 RX,TX SDA,SCL SCK,MOSI,MISO CAN_H,CAN_L
多机通讯 协议仲裁 协议仲裁 硬件片选信号 硬件仲裁
常用芯片 MAX485 TJA1050

具体实现

1、USART

USART全称全双工通用同步/异步串行收发器(Serial Communication)


USART没有专门的时钟线,RX作为接收引脚,TX作为发送引脚,通信的波特率提前给定,通信数据帧如下图所示,主要包括:起始位、数据位、可选择校验位、停止位。
空闲时数据线呈现高阻态,当有数据传输时,数据线按照既定频率,依次发送数据帧。
USART发送数据帧
RS232硬件接口,全双工,信号电平值较高+/-12V, 信号共地传输,传输速率20Kbps (不知道限制此速率的因素),点对点通信
RS485硬件接口,半双工,TTL电平+/-5V,信号差分传输,10m以内最高传输速率可以达35Mbps。推荐使用总线型网络,RS485推荐总线类型
通信速率高且传输距离远时,硬件设计的要求非常,需要计算相关参数。使用相应的482芯片作为收发器,常用接法如下。PA1为模式控制引脚,高电平->发送使能,低电平->接收使能。
485芯片常用接法
根据数据手册,MAX系列芯片支持最高20Mbps的通信速率,手册链接
CH340是USB<=>串口芯片,支持最高20Mbps的通信速率,使用说明链接

2、I2C

I2C全称串行总线收发器-(Inter - Integrated Circuit)


I2C有两根信号线,SCL时钟线,SDA数据线,分为主从模式,主机产生SCL信号,并且使用SDA数据线收发数据;从机被动应答,当接收到的广播地址指向自己就与主机建立连接,进行通讯。
I2C通讯信号

一帧数据主要包括:传输起始信号(S)、从机地址信号(SLAVE_ADDRESS)、传输方向选择位(R/W)、数据位(DATA)、应答为(ACK/NACK)、停止传输位( P)。如下图所示
I2C通信帧结构
连接方式,环形总线,如下图所示,不需要额外通讯芯片,但是两根信号线需要上拉。
I2C总线结构

3、SPI

SPI全称串行外围设备接口-(Serial Peripheral Interface)


SPI有GND,SCK,MISO,MOSI,所以的设备都连接在这三条总线上,SCK提供时钟信号,MOSI中设备输出/从设备输入引脚,MISO主设备输入/从设备输出。通信数据信号线只包含数据,为8位或者16位可配置。先是片选信号NSS选择对应设备,然后SCK产生时钟信号,在MOSI或者MISO数据线上传输数据。
SPI时序图
时序图如下
在这里插入图片描述

另外,SPI有四种采样模式,可以通过配置CPOL和CPHA选择
SPI采样模式
SPI的总线模式如下图所示
SPI连接方式

4、CAN

CAN全称控制器局域网-(Controller Area Network)


CAN使用两根信号线CAN_H和CAN_L,使用差分信号进行异步通讯。标准数据帧如下所示。
CAN的标准数据帧

CAN的短距离闭环高速总线通信网络。
CAN高速网络
CAN通过ID的优先级来帮助进行仲裁,当在总线空闲状态下,同时有两个以上的设备申请使用总线,就会判断ID的优先级,优先级高的先发送,优先级低的保留,等待数据发送完毕后,再次进行上述操作。

参考

腾讯云:【通信专栏】STM32单片机/485通信详解
21ic电子技术论坛:论RS485如何实现多主通信
STM32F4xx中文参考手册
[野火EmbedFire]《STM32库开发实战》

版权声明:本文为CSDN博主「学海菜鸡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45641456/article/details/121687254

生成海报
点赞 0

学海菜鸡

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

X-bot

X-bot 前言 这个项目是我在稚辉君的视频里面看见的,是一个完全开源的项目,而且对他来说是一个比较简单的项目,但对于我这种没有什么DIY经验的同学来说,还是有点难的,不过