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 通信协议。

相关推荐
半杯咖啡半行码6 小时前
STM32之ARM通用汇编指令详解:从指令格式到寻址方式
汇编·arm开发·stm32
创界工坊工作室7 小时前
22-基于STM32的汽车防盗系统设计
stm32·单片机·嵌入式硬件·proteus
雨田言炎9 小时前
STM32之RCC系统时钟控制(芯片的心脏控制器)
stm32·单片机·嵌入式硬件
李永奉9 小时前
日常使用的锂电池上,新、旧锂电池的差异分析
单片机·嵌入式硬件·物联网·智能手机·电脑
额额额对了10 小时前
IMX6ULL 杂项设备 LED 驱动
stm32·单片机·嵌入式硬件
长春的KAKA11 小时前
Proxmark3 Iceman分支CLI命令总表
嵌入式硬件
半杯咖啡半行码11 小时前
STM32开发之IIC通信详解:从协议基础到FM24CL04实战
stm32·单片机·嵌入式硬件
硅基手札12 小时前
【I2C 技术系列 05】I2C 多主仲裁与时钟同步
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
szxinmai主板定制专家12 小时前
面向虚拟电厂协调控制:RK3588+FPGA+AI边缘控制器设计思路与算力评估
人工智能·嵌入式硬件·fpga开发·机器人·jetson·zynq·振动采集
Zw-awa12 小时前
DO 和 AO 到底怎么选:比较器替你决定了什么
stm32