USART、IIC、SPI、485、CAN通信概括

本文详细介绍了五种常见的嵌入式通信接口:USART(通用同步异步收发器)、IIC(两线式串行总线)、SPI(串行外围设备接口)、RS485通信和CAN通信。讨论了它们的工作原理、特点、数据传输方式以及应用场合,包括全双工和半双工、同步和异步的区别,并提到了波特率计算、信号电平标准和网络拓扑结构等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)USART——通用同步异步收发器    TxD,RxD,GND
   全双工;同步 / 异步
  移位寄存器——发送 / 接收缓冲区——MCU内核
  数据帧格式:起始位、数据位、奇偶校验位、停止位
  波特率=串口时钟频率/(16*USARTDIV)

(2)IIC——两线式串行总线   SCL,SDA
   半双工;同步
  在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。
  空闲信号——SCL和SDA都为高电平(由上拉电阻拉高)
  开始信号——SCL为高电平期间,SDA由高电平到低电平的跳变
  停止信号——SCL为高电平期间,SDA由低电平到高电平的跳变
  应答信号——发送器每发送一个字节,就释放数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节。

(3)SPI——串行外围设备接口   MOSI,MISO,SCL,CS
   全双工;同步
  主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。
  外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

(4)RS485通信
   半双工;异步
  串行通讯标准是RS232和RS485, 它们定义了电压,阻抗等,但不对软件协议给予定义.
  RS232接口的信号电平值较高(+/-12V),易损坏接口电路。
  RS485用缆线两端的电压差值表示数据。逻辑“1”以两线间的电压差+(2-6)V表示;逻辑“0”以两线间的电压差为-(2~6)V表示。
  RS485推荐使用在点对点网络中,线型,总线型,不能是星型,环型网络。理想情况下RS485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗(一般为120Ω)。没有特性阻抗的话,当所有的设备都静止或者没有能量的时候就会产生噪声。

(5)CAN通信  CAN_L, CAN_H
   半双工;同步
  利用两根总线的电位差判断总线电平。显性电平对应逻辑0,隐性电平对应逻辑1.
  CAN通信由以下5中类型帧组成:数据帧 (发送单元向接受单元传送数据)、遥控帧 (接收单元请求数据)、错误帧 (检测出错误时通知其它单元)、过载帧 (接收单元尚未做好接收准备)、间隔帧 (分隔数据帧和遥控帧)。数据帧有7个段组成:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束.
  总线的仲裁:总线空闲时,最先发送的单元获得发送优先权,一但发送,其他单元无法抢占。如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级.
  一个位有4个段:同步段、传播时间段、相位缓冲段1、相位缓冲段2.每个段又由若干Tq(位时序)组成。因此,波特率=1/位时间(各个段时间之和).

### 不同通信协议的特点及应用场景 #### USART USART 是通用异步收发传输器(Universal Synchronous/Asynchronous Receiver/Transmitter),它支持多种工作模式,既可以作为 UART 使用也可以实现同步通信。其主要特点如下: - **灵活性**:可以配置为异步或同步模式,适应性强。 - **波特率可调**:通过设置分频寄存器来调整通信速率[^1]。 - **应用场合**:适用于简单的点对点通信场景,比如调试信息输出、传感器数据采集等。 ```c // 配置USART的基本参数示例 void USART_Init(USART_TypeDef* USARTx, uint32_t baudrate) { // 设置波特率等相关参数 } ``` #### IIC (I²C) I²C(Inter-Integrated Circuit)是一种两线制的半双工串行总线,主要用于短距离通信。以下是它的特性: - **硬件连接简单**:仅需两条信号线(SDA 和 SCL),适合多从机架构。 - **速度适中**:标准模式下可达 100 kbps,快速模式下可达 400 kbps,高速模式下可达 3.4 Mbps[^3]。 - **地址机制**:每台设备都有唯一的地址,便于管理多个外设。 - **典型应用**:常用于连接低速外设,如 EEPROM、温度传感器、LCD 显示屏等。 ```c // 初始化I2C模块 void I2C_Init(I2C_HandleTypeDef *hi2c, uint32_t clockSpeed) { hi2c->Instance->CR2 |= clockSpeed; } ``` #### SPI SPI(Serial Peripheral Interface)是一种四线制的全双工同步通信方式,具有较高的数据吞吐量。具体特征包括: - **高速度**:相比 I²C 更快,通常能达到几兆比特每秒甚至更高。 - **主从结构清晰**:一个主机控制多个从机,简化了时序逻辑设计。 - **无应答确认**:不像 I²C 提供 ACK/NACK 机制,因此可靠性依赖于上层协议。 - **适用范围**:广泛应用于存储卡读写、ADC/DAC 转换以及显示屏驱动等领域。 ```c // 发送和接收数据函数 uint8_t SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t dataOut) { HAL_SPI_TransmitReceive(hspi, &dataOut, NULL, 1, HAL_MAX_DELAY); return hspi->RxXferSize ? *(hspi->pRxBuffPtr) : 0; } ``` ### 总结对比表 | 特性 | USART | IIC | SPI | |--------------|---------------------------|--------------------------|-------------------------| | 数据方向 | 半双工 | 半双工 | 全双工 | | 连接线路数 | 可变 | 2 | 4 或更少 | | 波特率 | 用户定义 | 较低至较高 | 很高 | | 地址寻址 | 无需 | 支持多设备地址 | 主从关系固定 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值