主题中讨论的其他器件:TM4C123、 TM4C123GH6PM、
大家好、我正在尝试通过 I2C 协议将 L3g4200d 与 tm4c123连接、但无法读取任何数据。 我正在使用 Keil 5。 所有6个寄存器输出 FF、与陀螺仪模块的任何方向无关。请帮我 一个新手。
#include
#include
#include
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/tm4c123gh6m.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.c"
#include "driverlib/uart.c"
#include "driverlib/sysctl.h"
#include "driverlib/pin_map.h"
#include "inc/hw_i2c.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/rom.h"
#include "utils/uartstdio.c"
#include "driverlib/gyro.h"
volatile int x=1、a=1、y=1、z=1、b=1、c=1;
空配置 UART (空)
{
//
//启用 UART 使用的 GPIO 外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
//
//启用 UART0
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
//
//为 UART 模式配置 GPIO 引脚。
//
ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
//使用内部16MHz 振荡器作为 UART 时钟源。
//
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
//
//初始化控制台 I/O 的 UART
//
UARTStdioConfig (0、115200、16000000);
UARTprintf ("UART 初始化...");
}
空配置 I2C()
{
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_6);
ROM_GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_7);
ROM_GPIOPinConfigure (GPIO_PA6_I2C1SCL);
ROM_GPIOPinConfigure (GPIO_PA7_I2C1SDA);
I2CMasterInitExpClk (I2C1_base、SysCtlClockGet ()、false);
/* SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
GPIOPinConfigure (GPIO_PB2_I2C0SCL);
GPIOPinConfigure (GPIO_PB3_I2C0SDA);
GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
I2CMasterInitExpClk (I2C0_BASE、SysCtlClockGet ()、false);
//清除 I2C FIFO
HWREG (I2C0_BASE + I2C_O_FIFOCTL)= 80008000;*/
}
INT I2CReceive (int slave_addr、int reg)
{
I2CMasterSlaveAddrSet (I2C1_base、slave_addr、false);
I2CMasterDataPut (I2C1_base、reg);
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);
while (I2CMasterBusy (I2C1_base)) a++;
I2CMasterSlaveAddrSet (I2C1_base、slave_addr、true);
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_Receive);
while (I2CMasterBusy (I2C1_base)) b++;
a=1;b=1;
volatile int r=I2CMasterDataGet (I2C1_base);
返回 r;
}
int main()
{SysCtlClockSet (SYSCTL_SYSDIV_1| SYSCTL_USE_PLL | SYSCTL_OSC_INT | SYSCTL_XTAL_16MHz);
volatile int freq=SysCtlClockGet ();
volatile int xl、yl、zl、xh、yh、zh;
ConfigureUART();
ConfigureI2C();
while (1)
{XL=I2CReceive (slave_address、out_X_L);xh=I2CReceive (slave_address、out_X_H);
yL=I2CReceive (slave_address、out_Y_L);yh=I2CReceive (slave_address、out_Y_H);
ZL=I2CReceive(从器件地址,OUT_Z_L);Zh=I2CReceive(从器件地址,OUT_Z_H);
x=(xh<<8)|XL;UARTprintf ("x=%d\t"、x);
y=(yH<<8)|yl;UARTprintf ("y=%d\t"、y);
z=(zh<<8)|zl;UARTprintf ("z=%d\n"、z);
}
返回0;
}