本帖最后由 gaoyang9992006 于 2023-7-1 19:50 编辑
首先引入I2C的头文件
在setup中使用
启用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时候还可以指定管脚,另外还有多种其他用法的函数,请阅读官方文档。 |