stm32之I2C通信协议

I2C简介

I2C与UART,SPI统称为串行接口通信。但三者各有各的特点。I2C适合短距离传输。引脚少,硬件简单,可扩展。

  1. 物理层简介:
    在这里插入图片描述
    如上,一个主机可以扩展多个从机,每个从机均有不同的地址。但是SCL(串行时钟线,用于收发同步。)和SDA(数据线,用于传输数据。)总线(总线指的是多个设备共用的信号线。)必须接上拉电阻。接上拉电阻的原因是要保证有足够的驱动能力。
  2. 协议层
    协议层规定了通讯的起始和停止信号,数据的有效性,响应,仲裁,时钟同步,地址广播等方面。

读写过程

在这里插入图片描述
注:
S:传输开始信号
SLAVE ADDRESS:从机地址
R/W:读或者是写,读是1,写是0
在这里插入图片描述 :应答信号(ACK)或非应答信号(NACK)。
DATA:传输的数据。
P:传输停止信号。
结合以上字母内容,即可理解I2C的读、写以及复合通讯通讯过程。

通讯的起始和停止信号的有效性

在这里插入图片描述
当SCL为高电平,SDA由高电平变为低电平这个过程是起始信号。
当SCL为高电平,SDA由低电平变为高电平这个过程是停止信号。

数据有效性

在这里插入图片描述
SDA线在SCL的每个时钟周期内传输一位数据。
当SCL为高电平,SDA传输的数据为有效,SDA为高电平时为1,低电平为0。当SCL为低电平时,SDA传输的数据无效。注意:传输时以字节为单位,传输的字节数不限。

从机地址,读写方向数据位

主机通过SDA线去广播从机地址(SLAVE ADDRESS),从机地址分为7位或10位,7位较常见。紧跟设备地址的一位是读写方向数据位。1表示主机从从机读取数据,0表示主机向从机写数据。

响应信号

当从机接收到数据时,会向主机发送响应信号(ACK或NACK),如果发送ACK是希望对方继续发送数据,同理,发送NACK是不希望对方发送数据。
在这里插入图片描述
第九个时钟周期时,数据发送端会释放SDA的控制权,转而由数据接收端控制SDA数据线,当SDA为高电平时,表示的是非应答信号(NACK),低电平时,表示的是应答信号(ACK)。

主发送器通讯过程

在这里插入图片描述
如上图,红线之上就是我们前面见过的图,而红线之下的事件是因为stm32的频率达到几十兆,而I2C的频率最多是400KHz,频率不同,为了确保每一步都完成,设定了这些响应事件。如果有需要,均可以在以下寄存器中找到相应的解释说明:
在这里插入图片描述

主接收器

在这里插入图片描述
注意:在写入标志位后,要及时清除。

写到这里大概就完了,剩下得代码会上传到资源中,如果哪里有不明白的,欢迎交流学习!

完。

点赞收藏加关注啊。嘻嘻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值