STM32 IIC协议

本文代码使用 HAL 库。

文章目录

前言

从这篇文章开始为大家介绍一些通信协议,包括 UART,SPI,IIC等。

UART串口通讯协议
SPI通信协议


一、什么是IIC协议

  1. IIC协议概念:

IIC 协议是由 SDA 数据线 和 SCL时钟线 组成的串行总线,可以发送接收数据,采用半双工的通信方式。每个挂在总线上的器件都有唯一的地址,通常一个主机多个从机。

  • 数据线 :完成数据的收发
  • 时钟线:完成数据的同步传输。

位速在标准模式下可达 100kbits/s, 在快速模式下可达 400kbits/s, 在高速模式下可达 3.4Mbits/s.

  1. IIC 系统结构:

    (1). 在一个芯片内部,有一个或者多个 IIC控制器(主机)。
    (2). 在一个 IIC 控制器上,可以连接一个或多个 IIC设备(从机)。
    (3). IIC 总线只需要 2 根线:时钟线 SCL, 数据线 SDA。
    (4). 在 IIC总线的SCL,SDA 上都有上拉电阻。
    (5). 时钟线只能由主机产生,作用给从机,从而完成数据的收发同步。

二、IIC信号

IIC协议中数据的传输单位是字节。要用到 9 个时钟。前 8 个时钟用来传输数据,第 9 个时钟用来传输信号。传输数据时,先传输最高位

  1. 空闲状态
    当总线上的SDA 和 SCL 两条信号线同时处于高电平时,便于空闲状态。当不传输数据时,SDA和SCL就会被上拉电阻拉高,便进入了空闲状态。
  2. 开启信号
    当SCL为高电平期间,SDA由高变低的跳变;便是总线的起始信号,只能由主机发起,且在空闲状态下才可以启动。
  3. 停止信号
    当 SCL为高电平期间,SDA 由低到高的跳变,便是总线的停止信号,表示数据已经传输完成。
  4. 响应信号
    接收器在接收到 8 位数据后,在第 9个周期,拉低 SDA。当接收方接收该字节成功,便会输出一个 ACK应答信号。

当SDA 为高电平,表示为非应答信号 NACK当 SDA为低电平,表示为应答信号 ACK

三、IIC协议的通讯时序

IIC总线上的设备可以 发送/接收 数据。

1. 写操作

流程如下:

- 主芯片要发送一个起始信号 start 。
- 然后主设备发送一个设备地址(用来确定是往哪个从机写数据),方向(0表示读,1表示写)。
- 从设备回应(用来确定从设备是否存在),然后就可以传输数据。
- 主设备发送一个字节的数据给从设备,等待回应。
- 每传输一字节数据,接收方都要有一个回应信号(用来确定数据是否接收完成),然后再传输下一个数据。
- 数据传输完成后,主芯片就会发送一个停止信号。

2. 读操作

流程操作:

- 主设备发送一个起始信号。
- 主设备发出一个从设备地址(用来确定从哪个设备读数据),方向(0表示写,1表示读)。
- 从设备回应(用来确定从设备是否存在),然后就可以传输数据。
- 从设备发送一字节数据给主设备,等待回应。
- 每传输一字节数据,接收方要有一个回应信号(用来确定数据是否接收成功),然后再传输下一个数据。
- 数据发送完成后,主设备会发送一个停止信号。

四、上拉电阻作用

  1. IIC 总线的SCL,SDA 上都有上拉电阻。外接2个上拉电阻的作用:当总线处于空闲状态时,总线为高电平状态

  2. 问 :SCL 为何要使用上拉电阻?

答 :在第 9 个时钟后,如果有某一方设备需要更多的时间来处理数据,它可以一直驱动三极管把 SCL 拉低。当 SCL为低电平时,其他设备都不使用 IIC总线;只有当 SCL从低电平变为高电平的时候,IIC总线才能够被使用。

当该设备处理数据完毕,就绪时,就不再驱动三极管。这时上拉电阻把SCL变为高电平,其他设备就可以继续使用 IIC总线了。


总结

下一篇文章为大家介绍 SPI 和 UART 通信协议。

相关推荐
MARIN_shen26 分钟前
Marin说PCB之POC电路layout设计仿真案例---06
网络·单片机·嵌入式硬件·硬件工程·pcb工艺
Asa31943 分钟前
STM32-按键扫描配置
stm32·单片机·嵌入式硬件
南城花随雪。1 小时前
单片机:实现驱动超声波(附带源码)
单片机·嵌入式硬件
嵌入式科普1 小时前
十三、从0开始卷出一个新项目之瑞萨RZN2L串口DMA接收不定长
c语言·stm32·瑞萨·e2studio·rzn2l
yutian060610 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程12 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉16 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名67717 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式科普17 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
嵌入式大圣17 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp