(STM32)I2C通信协议

 I2C(Inter IC BUS)

一主多从:全程只有一个主机,多个从机,从机不可以主动申请控制I2C总线,必须主机来发送控制权。

多主多从:本质上也是一主多从,当从机想要申请控制权和现有主机产生冲突时,由通信协议仲裁,胜利的一方获得主机权,失败的一方则成为从机。但是也要注意时钟线的同步。 

 SCL时钟线:主机有绝对控制权,任何时刻从机只有被动读取,不允许控制SCL

SDA数据线:从机不允许主动申请控制,只有主机发送读取从机的命令后或者从机应答时才能短暂获得控制权。

 禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出结构。

有线与的特征:被一个或多个设备拉低总线电平后,总线保持低电平。

 空闲状态:SCL和SDA都处于高电平状态。

起始条件触发后,从机都会处于复位状态,等待主机的召唤。

起始和终止条件都是主机产生的,从机不允许产生。 

发送数据时:USART串口是低位现行                   I2C是高位先行。

 主机接收字节之后,如果不发送应答,从机会释放SDA线。

主机发送字节之后,会释放SDA给从机控制,并在下一个SCL高电平期间检测是否有应答。

每个I2C设备出厂时,厂商都会为其分配一个七位地址(主要前4位是固定的,后面几位根据芯片女型号是可变的)。一般不同芯片型号,地址不一样,但是如果再一条总线用到相同的设备,可以改变七位当中的后几位用来区分(具体由对应芯片手册里面可以找到)。

 

当前地址指针:从机中,所有寄存器被分配到了一个先行区域中,有一个单独的指针变量,默认上电时指向0地址,每写入一个字节或读出一个字节后,这个指针会自增一次移动到下一个位置。

 指定地址读是复合格式,前面两个字节是指定地址写,然后立即发送当前地址读字节,就成为指定地址读的时序了。

 在读字节当中,如果主机想要停止接收,在接收最后一个字节后选择非应答,从机会释放总线,SDA控制权交回主机。简单来说就是主机给应答,从机会继续发,主机非应答,从机就不再发了。

从机对SDA的控制权,开始于从机地址最后一位给1在,终止与主机给非应答位1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32中的I2C通信协议是一种串行通信协议,用于在微控制器之间或微控制器与外部设备之间进行数据传输。I2C是由Philips(现在的NXP)公司开发的。它使用两根线来传输数据,即SDA(Serial Data Line)和SCL(Serial Clock Line)。 在STM32中,I2C通信协议的实现依赖于硬件模块,通常被称为I2C控制器或I2C外设。STM32微控制器通常具有多个I2C控制器,每个控制器都有自己的寄存器集和配置选项,用于控制通信的各个方面。 使用I2C通信协议进行数据传输时,通常有一个主设备(Master)和一个或多个从设备(Slave)。主设备负责发起和控制通信过程,而从设备负责响应主设备的请求并提供数据。 在STM32中,使用I2C通信协议需要进行以下步骤: 1. 配置I2C控制器的时钟频率和通信速率。 2. 配置主设备或从设备的地址。 3. 发送开始信号,开始通信过程。 4. 发送或接收数据,可以是单字节或多字节数据。 5. 发送停止信号,结束通信过程。 在编程方面,STM32提供了相应的库函数和API来简化I2C通信的实现。开发者可以使用这些函数来配置I2C控制器、发送和接收数据等操作。 需要注意的是,具体的I2C通信协议的细节可能会因不同的STM32系列和型号而有所不同。因此,在使用STM32进行I2C通信时,需要参考相应的数据手册和参考资料来了解具体的实现细节和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值