TI中文支持网
TI专业的中文技术问题搜集分享网站

我写了一段程序,想通过I2C与GY-521陀螺仪通信,结果受到的全是相同的值,这是为什么??

我写了一段程序,想通过I2C与GY-521陀螺仪通信,结果受到的全是相同的值,这是为什么??

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/adc.h"
#include "driverlib/pwm.h"
#include "driverlib/i2c.h"

#define SLAVE_ADDR 0x68//从机地址为GY-521的地址0X68
#define uint32 unsigned int

//串口初始化
void UARTINIT()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
//使能 UART0
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
//
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
//
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
//设置传输的速率
UARTStdioConfig(0, 115200, 16000000);
}

int main(void)
{
uint32 a;

SysCtlClockSet(SYSCTL_SYSDIV_5 |SYSCTL_USE_PLL|SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
UARTINIT();

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);
//PB2,PB3
GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3);
I2CMasterInitExpClk(I2C0_BASE,SysCtlClockGet(),false);
I2CMasterSlaveAddrSet(I2C0_BASE,SLAVE_ADDR,true);
//I2CMasterBusBusy()
while(1)
{
while(I2CMasterErr(I2C0_BASE));
I2CMasterControl(I2C0_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE);
a = I2CMasterDataGet(I2C0_BASE);

//
while(I2CMasterBusy(I2C0_BASE));

UARTprintf("%02x",a);

}
}

Michael Sun:

这个陀螺仪我也没调过,不过一般来说这类I2C设备不是直接就能读出结果的呀,

得先把寄存器地址啥的写进去,然后再读才行。看看陀螺仪的手册上要求I2C怎么操作的?

这样直接读的未必是数据寄存器的值。

X tank:

回复 Michael Sun:

地址为0x68,用I2CMasterSlaveAddrSet设置的,这样就行了????

Michael Sun:

回复 X tank:

这个0x68只是陀螺仪在I2C总线上的设备地址吧。

陀螺仪内部会有一系列的配置、状态、数据寄存器,他们都有自己的地址和寻址方式的。

赞(0)
未经允许不得转载:TI中文支持网 » 我写了一段程序,想通过I2C与GY-521陀螺仪通信,结果受到的全是相同的值,这是为什么??
分享到: 更多 (0)