打印

如何在Arduino中使用I2C

[复制链接]
615|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2023-7-1 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gaoyang9992006 于 2023-7-1 19:50 编辑

首先引入I2C的头文件
#include <Wire.h>
在setup中使用
  Wire.begin();
启用I2C总线接口
一般I2C的主机操作有两个:读和写
而读写都要遵从I2C协议:
写入:以开始信号+从机地址+若干字节(内存地址+发送数据)+结束
所以在ARDUINO中方法如下,我们将使用SI5351来示例:
void SI5351_WR_Byte(unsigned char reg_addr, unsigned char dat) 
{
  Wire.beginTransmission(SI5351A_ADDRESS);  // 开始I2C传输,并指定设备地址为SI5351A_ADDRESS
  Wire.write((unsigned char)reg_addr);      // 发送地址字节,注意有效位为低8位,自动生成的地址为16BIT的。
  Wire.write(dat);              // 发送数据字节
  Wire.endTransmission();       // 结束传输
}
而读数据呢也是类似的,开始信号+从机地址+结束+开始读取
unsigned char SI5351_RD_Byte(unsigned char addr) 
{
  unsigned char dat = 0;
  Wire.beginTransmission(SI5351A_ADDRESS);  // 开始I2C传输,并指定设备地址为SI5351A_ADDRESS
  Wire.write(addr);             // 发送地址字节
  Wire.endTransmission();       // 结束传输

  Wire.requestFrom(SI5351A_ADDRESS, 1);    // 请求从设备地址SI5351A_ADDRESS读取1个字节的数据
  if (Wire.available())
  {
    dat = Wire.read();          // 读取数据字节
  }

  return dat;
}
而后其他的上层函数就调用这两个基本上都可以满足需求了。

另外在启用I2C时候还可以指定管脚,另外还有多种其他用法的函数,请阅读官方文档。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
zhuomuniao110 + 6 很给力!

相关帖子

发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2005

主题

16118

帖子

213

粉丝