IIC、SPI、USART、RS485、RS232、CAN外设通信总结《面试必备》

特性IIC (I2C)SPI (Serial Peripheral Interface)USART (Universal Asynchronous Receiver/Transmitter)RS485RS232CAN (Controller Area Network)Modbus
传输方式双线(数据线 SDA 和时钟线 SCL)四线(三条数据线 + 时钟线)双线或单线(数据线 TX/RX 和时钟线)差分双线(A、B线)单端双线(TX/RX)差分双线基于串行通信协议
数据传输模式同步同步异步或同步差分异步传输异步传输异步传输主从通信
传输速率100 kbps / 400 kbps / 1 Mbps高达 50 Mbps(取决于实现)1200 bps 到 115200 bps(可调节)10 kbps 到 10 Mbps300 bps 到 115200 bps(常见)高速(高达 1 Mbps)9600 bps 到 115200 bps
最大距离1 米到几米(受电容限制)一般数米,具体取决于线材质量与速度一般数米,具体取决于设备和波特率可达 1200 米15 米(标准,最大可达 50 米)高达 40 米(高速度模式)通常几米至几十米
地址分配支持多主机,设备地址唯一无地址分配(点对点或主从通信)无地址分配(点对点通信)设备有唯一地址无地址分配(点对点通信)支持多节点,使用标识符主从通信,主机地址唯一
应用传感器、EEPROM、显示器等存储设备、显示器、传感器等通信接口、调试、数据传输工业控制、远程设备通信计算机串口、嵌入式系统汽车电子、工业控制、CAN网络工业自动化,SCADA系统等
优点简单、低引脚数,支持多设备速度快,适合短距离高频率通信通用,适用于串行通信长距离、高抗干扰性简单、广泛应用高效、可靠,支持多节点易于实现,协议简单
缺点速度较慢,距离受限需要多线连接,距离较短适用范围有限,波特率有上限需要差分信号,复杂性高传输距离有限,受干扰影响节点数量有限,硬件成本较高只支持主从通信

特性IIC (I2C)SPI (Serial Peripheral Interface)USART (Universal Asynchronous Receiver/Transmitter)RS485RS232CAN (Controller Area Network)Modbus
协议类型多主机、多从机协议点对点或主从模式协议异步通信协议差分信号传输协议串行通信协议串行通信协议应用层协议
工作模式主从模式,支持多主机通信主从模式,支持全双工通信主从模式,支持全双工(USART是通信的硬件接口)多主机(差分信号传输)主从模式(通常是计算机到设备)主从模式,支持多个节点主从模式(Modbus RTU/ASCII)
数据传输方式同步,时钟信号控制传输同步,全双工异步,无时钟信号,依赖波特率同步差分,双向数据传输单端,半双工差分,支持全双工或半双工串行,ASCII 或 RTU 编码
硬件需求仅需两根线(SDA、SCL),无需时钟信号需要至少四根线(MISO、MOSI、SCK、CS)需要两根线(TX、RX)差分驱动器(通常为485驱动芯片)串口接口(TX、RX)基于 CAN 总线的硬件接口基于串行通信硬件(RS232、RS485)
电源要求低功耗,适合便携设备较高功耗,适用于高速通信适合低功耗应用中等功耗(需要差分驱动器)低功耗(串口通信)适合高频、低功耗应用低功耗,取决于物理层
最大设备数7 位地址(可支持最多 127 个设备)限于一个主设备和一个或多个从设备只有一个发送和接收设备,不支持多个设备通常支持多个设备,但受限于总线长度和终端设备数量仅支持两个设备(点对点通信)支持多达 64 个节点(取决于硬件)通常支持多个从设备
时钟要求需要时钟信号(由主设备生成)需要时钟信号(由主设备提供)无时钟信号(基于波特率同步)无时钟信号无时钟信号通过同步通信进行传输无时钟信号
最大传输速率通常 100 kbps 或 400 kbps,但最高可达 1 Mbps高速,最高可达 50 Mbps最高 115200 bps(可以更高,但受限于硬件和距离)通常为 100 kbps 到 10 Mbps最高 115200 bps(常见)最高可达 1 Mbps(对于高带宽模式)9600 bps 到 115200 bps
最大传输距离一般 1-3 米,受电容影响较大一般为 1-5 米(较短)受电缆和传输速率限制,通常为 15 米可达 1200 米15 米(标准,最长可达 50 米)高速通信时可达 40 米(CAN FD 可高达 100 米)数米到几十米
数据完整性CRC 校验,保证数据传输完整性需要硬件和协议进行校验(例如,传输前后检验)校验和可以由硬件或协议层支持通过差分信号保证抗干扰性可以使用校验和或偶校验等错误检测和恢复机制较为完善(CRC、位填充)通过校验和检测错误
抗干扰性抗干扰性较弱,尤其在长线和高速传输下相对较强(依赖于传输环境和线缆质量)抗干扰性较差,容易受噪声影响非常强,适合工业环境使用抗干扰性较差很强,尤其适合汽车和工业环境,具备冗余和自恢复能力抗干扰性较强,适合远程应用
常见应用传感器、显示屏、温控、EEPROM 等低速设备高速存储设备、传感器、显示器、无线模块等调试端口、嵌入式系统通信、远程终端设备工业自动化、通讯、楼宇自动化计算机串口通信、调试接口汽车电子、工业自动化、建筑控制系统、机器人等工业自动化、远程设备、SCADA系统
优势简单,支持多设备通信,占用引脚少,低功耗高速、全双工,适合需要大量数据传输的应用简单、易于实现,广泛应用,硬件支持好长距离、抗干扰,适用于工业控制普及率高,广泛应用,简单高效、可靠,适用于高噪音环境,支持多设备通信协议简单,易于实现,支持不同传输方式
缺点速度较慢,距离短,设备数有限硬件要求高,接线复杂,适用于短距离通信传输速率和距离受限,易受噪声影响,硬件资源消耗较大需要专用驱动器,比较复杂传输速率较低,距离限制较大硬件实现较复杂,成本较高,节点数有限仅支持主从模式,传输速率限制

以下是 IIC、SPI、USART、RS485、RS232、CAN 和 Modbus 在数据传输速度方面的详细对比。速度是通信协议的重要指标之一,影响着其应用场景的选择。

数据传输速度对比

协议最大传输速率常见应用速度速度优势
IIC (I2C)1 Mbps(标准模式),400 kbps(高速模式),1 Mbps(高速模式)100 kbps - 400 kbps(典型)速度相对较慢,适用于低速、低功耗设备(如传感器、EEPROM)。
SPI50 Mbps 或更高1 Mbps - 20 Mbps(常见)高速,适合高频数据传输,常用于存储设备、显示器、传感器。
USART高达 1 Mbps,甚至更高9600 bps - 115200 bps(常见)异步通信中速率受限,适合调试和低速串行通信。
RS48510 Mbps 或更高100 kbps - 1 Mbps(常见)支持长距离通信,适用于工业控制和多点通讯。
RS232115200 bps(常见),可高达 1 Mbps9600 bps - 115200 bps(常见)相对较慢,常用于计算机串口与外部设备通信。
CAN1 Mbps(标准模式),5 Mbps(高速模式),1 Mbps(CAN FD)500 kbps - 1 Mbps(常见)高速可靠,适用于汽车电子和工业控制等高要求应用。
Modbus115200 bps(常见),高达 1 Mbps9600 bps - 115200 bps(常见)传输速度较慢,适合远程设备与工业自动化系统的主从通信。

具体速率说明:

  1. IIC (I2C)

    • 标准模式(Standard Mode):最大传输速率为 100 kbps,适用于低速应用。
    • 高速模式(Fast Mode):最大传输速率为 400 kbps,适合较高速度要求的应用。
    • 高速模式(High-speed Mode):最高 1 Mbps,适用于需要较高数据传输速率的场景。
    • 超高速模式(Ultra Fast Mode):少数特殊设备支持,最高可达 3.4 Mbps,但非常有限。
  2. SPI

    • SPI 的传输速率通常高于 IIC,最高可达 50 Mbps,具体取决于硬件实现和通信距离。SPI 是全双工协议,允许同时进行读写操作,常用于高速设备间的通信,如 Flash 存储器、传感器等。
  3. USART

    • 由于采用异步通信,USART 传输速率相对较低。典型速率范围为 9600 bps 到 115200 bps,适用于嵌入式系统、调试端口等通信场景。在某些高性能应用中,波特率可以调节,达到更高的传输速率。
  4. RS485

    • RS485 传输速率通常在 100 kbps 到 10 Mbps 之间,常见速率为 1 Mbps。它适合工业控制和长距离通讯,具有较好的抗干扰性能和差分信号传输特性。
  5. RS232

    • RS232 传输速率较低,通常最大为 115200 bps,但一些设备可支持高达 1 Mbps。其适用范围广泛,主要用于计算机串口通信和调试接口,但受限于传输距离和数据速率。
  6. CAN

    • CAN 的标准传输速率为 1 Mbps,适合高速和高可靠性的应用。CAN FD(Flexible Data-rate)协议允许更高的数据传输速率,最大可达 5 Mbps。常用于汽车电子、工业自动化等需要高带宽和低延迟的场景。
  7. Modbus

    • Modbus 在使用串行物理层时(如 RS232 或 RS485)传输速率通常为 9600 bps 到 115200 bps。虽然 Modbus 支持更高的速率(如 1 Mbps),但通常应用于低速数据交换和工业自动化设备中。

总结:

  • 最快的协议:SPI(最高可达 50 Mbps)。
  • 适合高速、高带宽应用:SPI、CAN、RS485(高于 1 Mbps)。
  • 适合中速应用:IIC(最高 1 Mbps)、USART(通常为 115200 bps)、RS485(1 Mbps)。
  • 较低速应用:RS232、Modbus(通常为 9600 bps 到 115200 bps)。

根据传输速率需求、应用场景以及电路设计的复杂度,可以选择不同的通信协议。例如,SPI 适合高频、高速的数据传输,而 RS485 则适合长距离、抗干扰的工业应用。

额外扩展:协议栈和通信规则

  1. I2C

    • 协议栈:硬件层和传输层主要由物理层协议决定。I2C协议本身很简单,不需要复杂的软件栈。
    • 通信规则:主设备负责生成时钟信号,数据按字节传输,每个字节后有一个ACK信号。
  2. SPI

    • 协议栈:硬件支持更强,主要包括物理层(电气信号)和传输层。SPI协议非常依赖硬件的支持。
    • 通信规则:数据通过 MOSI 和 MISO 通道交换,主设备提供时钟信号,控制从设备通过 CS(Chip Select)信号。
  3. USART

    • 协议栈:USART 是通信接口协议(通常由硬件实现),波特率、数据位、停止位等参数通过软件设置。
    • 通信规则:通过异步方式,数据按位进行传输,波特率在传输时必须同步。
  4. RS485

    • 协议栈:没有固定的协议栈,通常配合 Modbus 等高层协议使用。
    • 通信规则:数据通过差分信号传输,可以支持多主机和多个从机的通信。
  5. RS232

    • 协议栈:RS232 本身是物理层协议,通常与应用层协议(如 Modbus 或 PPP)结合使用。
    • 通信规则:点对点通信协议,不支持多设备互联。
  6. CAN

    • 协议栈:支持较复杂的协议栈,包括应用层(如 CANopen, J1939)、传输层和物理层。
    • 通信规则:每个节点有唯一的 ID,支持多节点传输,采用 CSMA/CD 机制进行访问控制。
  7. Modbus

    • 协议栈:Modbus 通常运行在 RS232 或 RS485 上,应用层协议明确,常见有 RTU、ASCII 和 TCP/IP 实

UART串口通信

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。

串口是“串行接口”的简称,即采用串行通信方式的接口。串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送,其特点是通信线路简单,但传输速度较慢。

UART在发送数据时,将并行数据转换成串行数据来传输;

UART在接收数据时,将接收到的串行数据转换成并行数据。

(1)同步串行通信(Synchronous serial communication),I2C、SPI等有时钟信号的协议,都属于这种通信方式。

(2)异步串行通信(Asynchronous serial communication),串口通信,就是这种通信方式。

在设置好数据格式及传输速率之后,UART负责完成数据的串并转换,而信号的传输则由外部驱动电路实现。电信号的传输过程有着不同的电平标准和接口规范,针对异步串行通信的接口标准有RS232、RS422、RS485 等,它们定义了接口不同的电气特性,如 RS-232 是单端输入输出,而 RS-422/485为差分输入输出等。

COM口是指针对串行通信协议的一种端口,是PC上异步串行通信口的简写,大部分为9针孔D型。COM口里分RS232,RS422和RS485,传输功能依次递增。

当单片机 1 想给单片机 2 发送数据时,比如发送一个 0xE4 这个数据,用二进制形式表 示就是 0b11100100,在 UART 通信过程中,是低位先发,高位后发的原则,那么就让 TXD 首先拉低电平,持续一段时间,发送一位 0,然后继续拉低,再持续一段时间,又发送了一 位 0,然后拉高电平,持续一段时间,发了一位 1……一直到把 8 位二进制数字 0b11100100 全部发送完毕。这里就涉及到了一个问题,就是持续的这“一段时间”到底是多久?由此便引入了通信中的一个重要概念——波特率

波特率就是发送二进制数据位的速率,习惯上用 baud 表示,即发送一位二进制数据的持续时间=1/baud。在通信之前,单片机 1 和单片机 2 首先都要明确的约定好它们之间的通 信波特率,必须保持一致,收发双方才能正常实现通信。

在 UART 通信的时候,一个字节是 8 位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位 0 表示起始位,然后发送 8 位数据位,数据位是先低后高的顺序,数据位发完后再发一位 1 表示停止位。这样本来要发送一个字节的 8 位数据,而实际上我们一共发送了 10 位,多出来的两位其中一位起始位,一位停止位。而接收方呢,原本一直保持的高电平,一旦检测到了一位低电平,那就知道了要开始准备接收数据了,接收到 8 位数据位后,然后检测到停止位,再准备下一个数据的接收。如下图所示:

IIC通信(半双工

在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。

lIC协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯。而SPI协议中没有设备地址,它使用NSS信号线来寻址,当主机要选择从设备时,把该从设备的NSS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以NSS线置低电平为开始信号,以 NSS线被拉高作为结束信号。

两线式串行总线,由数据线SDA和时钟SCL构成,可发送或接受数据。

空闲状态:两个信号线均处于高电平。

起始信号:当SCL为高期间, SDA由高到低的跳变。

停止信号:当SCL为高期间, SDA由低到高的跳变。

应答信号:发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节,应答信号为高电平时,规定为非应答位(NACK), 一般表示接收器接收该字节没有成功。对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。

数据有效性:IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

数据的传送

I2C中心以启动信号START来掌管总线,以停止信号STOP来释放总线;启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R/W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据;当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号。

写操作

读操作

在I2C总线上传送的每一位数据都有一个时钟脉冲相对应( 或同步控制),即在SCL 串行时钟的配合下, 在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发

IIC可以连接多少个外设?

所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

IIC总线最多可以挂多少个设备由IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址, 所以理论上可以挂127个从器件。

I2C总线理论上挂接127个器件,但是在实际使用中,通常不会超过8个,一般六七个就到头了,I2C总线的驱动能力有限,太多的器件总线驱动不起来。

我们知道IIC的所有设备是接在一根总线上的,那么我们进行通信的时候往往只是几个设备进行通信,那么这时候其余的空闲设备可能会受到总线干扰,或者干扰到总线,怎么办呢?

为了避免总线信号的混乱,IIC的空闲状态只能有外部上拉, 而此时空闲设备被拉到了高阻态,也就是相当于断路, 整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其他设备。

多主机会产生总线裁决问题当多个主机同时想占用总线时,企图启动总线传输数据,就叫做总线竞争。I2C通过总线仲裁,以决定哪台主机控制总线。

SDA仲裁

SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致,是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线。

I2C总线设备地址:

设备地址标识外设在总线上的唯一性,每一个外设都有唯一的设备地址,设备地址由原理图和芯片手册共同定义!CPU通过设备地址来访问到I2C总线上的某个外设!

IIC主要特点:

通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。

IIC主设备功能:主要产生时钟,产生起始信号和停止信号。

IIC从设备功能:可编程的IIC地址检测,停止位检测。

IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

用途

主要用于近距离低速的芯片之间的通讯,成百上千米远距离的通讯不行,抗干扰能力差,它的成本低,结构简单。

目前主要用于服务管理。 这包括各个组件状态的通信。 例如,管理员可以查询各个组件以管理系统配置,并了解组件(如电源和系统风扇)的功能状态。 可随时监控内存、硬盘、网络和系统温度等多个参数,提高系统安全性,便于管理。 IIC数据传输速度有标准模式100 kbps、快速模式400 kbps、高速模式3.4 Mbps,其他变种实现了低速模式10 kbps、高速模式1 Mbps。

SPI通信(全双工,高速)4条线通信:

每个时钟周期传输一位数据,因此数据传输的速度由时钟信号的频率决定,SPI 通信始终由主机发起,因为主机配置并生成时钟信号。

传输速度

SPI总线的传输速率可以达到几MByte/s且这不是固定的,一般受到以下几个因素影响:

1)SPI的最大时钟频率(一般情况下,其最大时钟频率为系统时钟频率的1/2);

2)CPU处理SPI数据的能力;

3)输出端驱动能力(PCB所允许的最大信号传输速率)等,其最大速率主要看主从器件控制器的性能。

优点:

比 I2C 更高的数据传输速率(几乎是 I2C 的两倍) 独立的 MISO 和 MOSI 线,因此可以同时发送和接收数据。

MISO主设备数据输入, 从设备数据输出。

MOSI主设备数据输出, 从设备数据输入。

SCLK时钟信号,由主设备产生。

CS从设备片选信号(是否工作),由主设备控制。

SPI工作原理总结

  1. 硬件上为4根线。
  2. 主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
  3. 串行移位寄存器通过MOSI信号线将字节传送给从机,也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
  4. 外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

1.通讯的起始和停止信号

在图中的标号1处,NSS信号线由高变低,是SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机检在自己的NSS线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。在图中的标号处,NSS信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。

2. 数据有效性

SPI使用MOSI及 MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及 MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。数据传输时,MSB先行(高位先行)或LSB(低位先行)先行并没有作硬性规定,但要保证两个SPI通讯设备之间使用同样的协定,一般都会采用上图中的MSR先行(高位先行)模式。

观察图中的2345标号处,MOSI 及 MISO的数据在SCK的上升沿期间变化输出,在SCK的下降沿时被采样。即在SCK的下降沿时刻,MOSI及 MISO的数据有效,高电平时表示数据"1”,为低电平时表示数据"0"。在其它时刻,数据无效,MOSI及 MISO为下一次表示数据做准备。

SPI每次数据传输可以8位或16位为单位,每次传输的单位数不受限制。

数据帧格式

串行同行数据传输分为 MSB 和 LSB,也就是最高有效位在前,还是最低有效位在前。(注:最左边的比特位即为最高有效位)。

比如传输一个字节:0x95(1001 0101)。

如果按照MSB(高位在前),则发送顺序:1001 0101。

如果按照LSB(低位在前),则发送顺序反过来:1010 1001。

3. CPOL(时钟极性)/CPHA(时钟相位)及通讯模式

上面讲述的图中的时序只是SPI中的其中一种通讯模式,SPI一共有四种通讯模式,它们的主要区别是∶总线空闲时SCK的时钟状态以及数据采样时刻。为方便说明,在此引入"时钟极性CPOL"和“时钟相位CPHA"的概念。

CPOL时钟极性和CPHA时钟相位的组合选择数据捕捉的时钟边沿。

SPI_CR寄存器CPOL和CPHA位,能够组合成四种可能的时序关系

3.1 CPOL就是决定SCLK这个时钟信号线,在没有数据传输的时候的电平状态。

CPOL(时钟极性)=0:空闲状态时,SCLK保持低电平

CPOL=1:空闲状态时,SCLK保持高电平

3.2 CPHA就是决定数据位传输是从第一个时钟(SCLK)边沿开始,还是第二个从二个时钟(SCLK)边沿开始。

CPHA=0:数据从第一个时钟(SLCK)边沿开始采集

CPHA=1:数据从第二个时钟(SLCK)边沿开始采集

3.3 CPOL和CPHA合体就形成了SPI四种模式。

如果CPHA(时钟相位)位置'1',SCK时钟的第二个边沿(CPOL位为0时就是下降沿,CPOL位为'1'时就是上升沿)进行数据位的采样,数据在第二个时钟边沿被锁存。

如果CPHA位被清'0',SCK时钟的第一边沿(CPOL位为'0'时就是下降沿,CPOL位为'1'时就是上升沿)进行数据位采样,数据在第一个时钟边沿被锁存。

SPI使用过程中,项目中遇到的问题

1、SPI1_SCK时钟引脚始终无法输出时钟信号

分析原因:SPI有些引脚对应的是特殊功能的引脚,以STM32F103C8T6为例,比如:PB3(SPI1_SCK)对应的是 JTDO,如果不配置则默认这个引脚的功能就是 JTDO的功能。芯片上电默认该引脚为调试引脚,电平为高电平,导致芯片的SPI1_SCK是无法拉低的。

找到芯片的复用重映射和调试I/O配置寄存器(AFIO_MAPR)的24:26位,可以看到相关解释说明:即通过修改这3位的配置可以关闭调试引脚配置,释放相应的IO口。实际使用中通过开启AFIO辅助时钟,将SWJ_CFG配置为2或者3即可当做普通IO使用,但如想作为SPI1时钟引脚,还需在MAPR寄存器开启SPI1的重映射!

开启SPI1的重映射才会有时钟信号输出!

具体解决方法,引脚重映射配置过程:

1. 使能GPIO时钟(重映射后的IO);

2. 使能功能外设时钟;

3. 使能AFIO时钟。重映射必须使能AFIO时钟:

RCC->APB2ENR |= 1<<0; //开启AFIO辅助时钟
RCCAPB2PeriphClockCmd(RCCAPB2PeriphAFlO,ENABLE);

4. 关闭PB3引脚的调试功能,并配置成为普通的IO引脚。

AFIO->MAPR |= 2<<24; //关闭JTAG,启用SW模式

5. 开启重映射。

AFIO->MAPR |= 1<<0; //开启重映射:
GPIO PinRemapConfig(GPIO_Remap_SPI1,ENABLE);

注意不建议配置为JTAG-DPDP,关闭SW-DP,那会导致芯片锁死,无法进行程序下载和程序调试!!

如芯片不小心被锁死可以通过以下方法尝试解决:

1、首先将电路板供电断开,包括3.3V电源供电和JLINK调试线供电等所有供电电源关闭;

2、找到芯片的BOOT0引脚,将BOOT0拉高。可以通过导线连接到一个3.3V的引脚,注意不要接入高于3.3V电压,否则烧坏板子!

3、BOOT0拉高以后,保持住这个高电平,打开电源,重新给板子上电。

4、接上JLink或者STLink,下载程序。下载完成以后,断开BOOT0,恢复低电平。

485通信(232通信)

区别:他们所定义的电压、阻抗不同。

RS232接口缺陷:

(1)接口的信号电平值较高(+/-12V), 易损坏接口电路的芯片。

(2) 传输速率较低,在异步传输时,波特率为20Kbps。

(3)接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。

(4)传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在50米左右。

RS485的特点包括(半双工):

①接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(2~6)V表示,逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS232降低了,不易损坏接口电路的芯片。

②传输速率高。10米时,RS485的数据最高传输速率可达10Mbps,在1200m时,传输速度可达100Kbps。

③抗干扰能力强。RS485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。

④传输距离远,支持节点多。RS485总线最长可以传输1200m以上(速率≤100Kbps)般 最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。

RS485推荐使用在点对点网络中,线型,总线型,不能是星型,环型网络。理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为1200)。

在上面的连接中,如果需要添加匹配电阻,我们一般在总线的起止端加入,也就是主机和设备4上面各加一个120欧姆的匹配电阻。

CAN通信

物理层特征

CAN 控制器根据CAN_L和CAN_H上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

显性电平对应逻辑:0,CAN_H和CAN_L之差为2V左右。

隐性电平对应逻辑:1,CAN_H和CAN_L之差为0V。

显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN总线的起止端都有一个120Ω的终端电阻来做阻抗匹配,以减少回波发射。

帧种类

CAN通信是以以下5种类型的帧进行的:

其中,数据帧和遥控帧有标准格式和扩展格式两种格式。

标准格式有11个位的标识符(ID),扩展格式有29个位的ID。

数据帧的格式。

①,帧起始。表示数据帧开始的段。

②,仲裁段。表示该帧优先级的段。

③,控制段。表示数据的字节数及保留位的段。

④,数据段。数据的内容,一帧可发送0~8个字节的数据。

⑤,CRC段。检查帧的传输错误的段。

⑥,ACK段。表示确认正常接收的段。

⑦,帧结束。表示数据帧结束的段。

总线仲裁

规律: 1,总线空闲时,最先发送的单元获得发送优先权,一但发送,其他单元无法抢占。

2,如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级。

从ID开始比较,如果ID相同,还可能会比较RTR和SRR等位。

一、SPI、I2C、UART通信速率比较:

SPI > I2C > UART
1、同步通信>异步通信;
2、同步通信时必须有一根时钟线连接传输的两端;
3、都是串行通信方式,并行通信用于内部存储间的通信,如flash;
4、适合传输的距离和通信速率成反比关系;


SPI:2数据线、1时钟线、1CS(设备片选线)/串行 同步 通信全双工
I2C:1数据线、1时钟线/串行 同步 通信半双工 传输距离比UART短
UART:2数据线、 1地线/串行 异步 通信全双工 传输距离比I2C长些

(I2C接口是“器件间”接口,是在一块板子之内传输数据)
(UART是 “设备间”接口,更多的是用于两台设备之间传输数据)

二、串行和并行、同步和异步的区别:

串行通信:利用一条数据线将数据一位一位的顺序传送,特点是通信线路简单,成本
低,适合于长距离传送

并行通信:利用多条数据线将数据的各位同时传送,特点是传输速度快,适合于短距离
传送

异步:在一个字符的传输时间范围内保持同步即可

同步:在数据传输过程中,需要一根时钟线同步,IIC总线,SPI总线

三、I2C接口与串行接口的区别:

I2C 两线式串行总线
UART 通用串行异步收发器 串口

UART是串行异步通信接口,它包括RS232、RS499、RS423、RS422和RS485等接口规范和 标准规范,即UART是串行异步通信口的总称。

I2C 是带地址的通讯,支持多方通讯,串口就搞不定;两者通讯的机制原理也不同;另外速度上I2C相对会快一些。I2C是一根线是时钟线,一根线是数据线,数据线是双向的,可以接收,也可以发送。

1、I2C接口是”器件间”接口,是在一块板子之内数据的,RS232串行接口是”设备间”接口,更多的是用于两台设备之间传 输数据。

2、从传输数据的距离来说,应该是RS232传输的距离较远。

3、串口是一根线传送数据,一根线接收数据

4、协议不同,波特率不同,串行接口,像单片机,时钟由内部MCU提供,而I2C接口要由器件来决定,不能太快。

5、I2C是同步串行传输,RS232(或称UART,通用异步收发器)是异步串行传输。

6、同步方式必须有一根时钟线连接传输的两端,i2c里的scl就是这根时钟线。因为同步方式不用花费额外的开销对其 数据,所以其传输速率一般比异步方式高。

四、总线接口 UART I2C SPI USB的异同点

1、UART 通用异步串行口,速率不快,可全双工,结构上一般由波特率产生器、UART发送器、UART接收器组成,硬件上两线,一收一发。

2、SPI 高速同步串行口,高速,可全双工,收发独立,同步接口,可实现多个SPI设备互联,硬件4条线。

3、I2C 双向、两线、串行、多主控接口标准。速率不快,半双工,同步接口,具有总线仲裁机制,非常适合器件间近距离经常性数据通信,可实现设备组网。

4、USB 通用串行总线,高速,半双工,由主机、hub、设备组成。设备可以与下级hub相连构成星型结构

五、串口通信:UART、SPI、I2C区别:

1、UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机通信上面用的最多。

2、SPI接口和上面UART相比,多了一条同步时钟线,上面UART的缺点也就是它的优点了,对通信双方的时序要求不严格,不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。

3、I2C接口也是两线接口,它是两根线之间通过复杂的逻辑关系传输数据的,通信速度不高,程序写起来也比较复杂。一般单片机系统里主要用来和24C02等小容量存储器连接。

SPI:高速同步串行口。3~4线接口,收发独立、可同步进行

UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢

UART:通用异步收发器

UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计
算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:

1、将由计算机内部传送过来的并行数据转换为输出的串行数据流。
2、将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。
3、在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。
4、在输出数据流中加入启停标记,并从接收数据流中删除启停标记。
5、处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。
6、处理由键盘或鼠标发出的中断信号(键盘和鼠票也是串行设备)。
7、可以处理计算机与外部串行设备的同步管理问题。
8、有一些比较高档的UART还提供输入输出数据的缓冲区,现在比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。
9、现在如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。

I2C:

能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像
主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。

UART:

单端,远距离传输。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很
多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。具体的适用范围就可多了,军用,医疗…到处到能用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值