STM32之I2C通信协议

前言:I2C通信是一种单片机的通讯协议,它分为软件I2C与硬件I2C,下面会具体介绍。很多外设都支持IIC通信协议,如MPU6050(六轴陀螺仪),OLED显示屏等等。

一、I2C简介

IIC通信为半双工的通信方式,只有一根数据线SDA(SDA通信引脚)和一根时钟线SCL(SCL通信引脚)。属于一主多从的总线结构,总线上的每个设备都有特定的地址(互不相同),通信都由主设备发起,从设备响应,拥有应答机制。

如图,IIC通信全部采用外置弱上拉电阻加开漏输出的电路结构。相当于图二中对于一根数据线,弱上拉高电平相当于一个向上拉的弹簧,所有设备都只能输出低电平或不输出。这样就可以杜绝短路现象,而且不需要频繁切换引脚模式。当设备需要输出信息时,只需要在低电平与不输出之间切换即可输出具有信息的高低电平波;当设备需要接受信息时,只需要不输出电平,然后观察高低电平变化即可。关于数据的收发,是由SDA与SCL两条线的电位变化来决定,这就有关IIC时序的基本单元。

SCL通信引脚用于时钟控制,与时钟控制寄存器(CCR)连接,用于控制时钟。

SDA通信引脚用于数据控制,由DR(数据寄存器)将数据传给数据移位寄存器再进行输出;

输入数据则是数据先从SDA引脚传到数据移位寄存器中再传给DR。

以下是I2C的功能框图,具体时序逻辑看下面介绍

二、I2C通信时序简介

通讯起始标志:SCL处于高电平,SDA由高电平转为低电平,而后SCL也进入低电平。

通讯结束标志:SDL处于高电平,SDA由低电平转为高电平,而后SCL也进入高电平。

当主机向从机传输数据时,首先主机会将本来上拉为高电平的SCL线给拉低为低电平,表示可以开始传输数据。这时SDA会通过高低电平的变化来向从机传输数据位。当这个过程重复8次,就能传输一个字节。如下图:

当从机接收数据时,只有当SCL为低电平时数据才能传输,所以所有从机包括主机在接收数据时,都是SCL低电平起始,SCL低电平结束。中间在传输完成一个数据为后SCL会短暂升为高电平,表示一个数据位传输完成(这与后面要将的应答机制有点关系)

三:应答机制

I2C的应答机制的存在就是为了防止程序出错造成的一系列后果,保证数据传输的准确性。

具体的内容,可以看手册,这里不过多介绍。重要的内容在于代码的编写,后续我会上传I2C的代码。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Young member

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值