gpt4 book ai didi

c - I2C 接口(interface)的 TIva C 系列问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:06 26 4
gpt4 key购买 nike

我目前正在尝试将我的 Tiva C 系列与 Sparkfun 分线板、IMU 数字组合板 - 6 自由度 ITG3200/ADXL345 连接,但我在使用 I2C 接口(interface)时遇到了问题。

目前这是我的代码:

#include <stdint.h>
#include <stdbool.h>
#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(这是加速度计的设备地址).

有人能给我指出正确的方向吗,我已经查看我的代码很长一段时间了,但仍然不知道哪里出了问题...

谢谢!

最佳答案

我浏览了您的代码,一切似乎都还不错。很明显,如果您得到回应,某些事情是正确的。但正如 Martin 所说,在不存在的情况下解决问题有些困难。除了写入 0x1A,您可以尝试对加速器使用其他 I2C 命令之一吗?此外,如果跳线连接到 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希望一切顺利。一直想自己买来玩,所以请随时关注我!

关于c - I2C 接口(interface)的 TIva C 系列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23404535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com