打印

如何在Arduino中使用I2C

[复制链接]
466|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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 很给力!

相关帖子

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

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1951

主题

15890

帖子

206

粉丝