TIva C系列I2C接口问题

我正在尝试将我的Tiva C系列与Sparkfun分线板,IMU数字组合板 – 6自由度ITG3200 / ADXL345连接,我遇到了I2C接口问题。

目前这是我的代码:

#include  #include  #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/i2c.h" uint8_t SLAVE_ADDRESS = 0x68; uint32_t first_byte, second_byte, temperature, result; void i2c_setup(void) { //Enable the I2C Module SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); //Wait at least 5 clock cycles SysCtlDelay(2); //Configure SDA and SCL GPIOPinConfigure(GPIO_PE4_I2C2SCL); GPIOPinConfigure(GPIO_PE5_I2C2SDA); //Wait at least 5 clock cycles SysCtlDelay(2); //Set PE4 as SCL GPIOPinTypeI2CSCL(GPIO_PORTE_BASE, GPIO_PIN_4); //Set PE5 as SDA GPIOPinTypeI2C(GPIO_PORTE_BASE, GPIO_PIN_5); //Configure Master, I2CMasterInitExpClk(I2C2_BASE, SysCtlClockGet(), false); } uint32_t i2c_read() { I2CMasterSlaveAddrSet(I2C2_BASE, SLAVE_ADDRESS, false); I2CMasterDataPut(I2C2_BASE, 0x1A); I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_SINGLE_SEND); while(I2CMasterBusBusy(I2C2_BASE)); //Loop until the bus is no longer busy I2CMasterSlaveAddrSet(I2C2_BASE, SLAVE_ADDRESS, true ); I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); while(I2CMasterBusBusy(I2C2_BASE)); //Loop until the bus is no longer busy first_byte = I2CMasterDataGet(I2C2_BASE); return first_byte; } void setup() { Serial.begin(9600); i2c_setup(); } void loop() { int test = i2c_read(); Serial.println(test); delay(1000); } 

我正在使用Energia测试我的程序,当我尝试从指定的寄存器读取时,我得到相同的结果,无论我选择哪个寄存器,结果总是十进制229(这是加速度计的设备地址)。

有人可以指出我正确的方向,我已经看了很长一段时间我的代码仍然不知道什么是错的…

谢谢!

我浏览了你的代码,一切似乎都好。 显然,如果你得到答复,有些事情是正确的。 但就像马丁所说的那样,在不存在的情况下解决问题有点困难。 您可以尝试使用其他I2C命令之一来代替写入0x1A吗? 另外如果跳线连接到VDD,你的地址应该是0x69(十进制105),你确定它是0x68吗?

我查看了sparkfuns网站上的文档,他们提供了以下命令列表。

  char WHO_AM_I = 0x00; char SMPLRT_DIV= 0x15; char DLPF_FS = 0x16; char GYRO_XOUT_H = 0x1D; char GYRO_XOUT_L = 0x1E; char GYRO_YOUT_H = 0x1F; char GYRO_YOUT_L = 0x20; char GYRO_ZOUT_H = 0x21; char GYRO_ZOUT_L = 0x22; 

GL希望一切顺利。 一直意思是买我自己玩的所以请留意我!