This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GH6PM使用MPU9150读取数据编译不通过



先上代码

#include<stdint.h>
#include<stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_ints.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "sensorlib/hw_mpu9150.h"
#include "sensorlib/hw_ak8975.h"
#include "sensorlib/i2cm_drv.h"
#include "sensorlib/mpu9150.h"
#include "sensorlib/ak8975.h"
#include "sensorlib/comp_dcm.h"
#define MPU9150_I2C_ADDRESS 0X68

tI2CMInstance g_sI2CInst;
tMPU9150 g_sMPU9150Inst;
tCompDCM g_sComPDCMInst;
volatile uint_fast8_t g_vui8I2CDoneFlag;
volatile uint_fast8_t g_vui8ErrorFlag;
volatile uint_fast8_t g_vui8DataFlag;

#define PRINT_SKIP_COUNT 10
uint32_t g_ui32PrintSkipCounter;

#ifdef DEBUG
void _error_(char *pcFilename,uint32_t ui32Line)
{}
#endif

void MPU9150AppCallback(void *pvCallbackData,uint_fast8_t ui8Status)
{
if(ui8Status==I2CM_STATUS_SUCCESS)
{
g_vui8I2CDoneFlag=1;
}
g_vui8ErrorFlag=ui8Status;
}

void IntGPIOb(void)
{
unsigned long ulStatus;
ulStatus=GPIOIntStatus(GPIO_PORTB_BASE,true);
if(ulStatus&GPIO_PIN_2)
{
MPU9150DataRead(&g_sMPU9150Inst,MPU9150AppCallback,&g_sMPU9150Inst);
}
}

void MPU9150I2CIntHandler(void)
{
I2CMIntHandler(&g_sI2CInst);
}

void MPU9150AppErrorHandler(char *pcFilename,uint_fast32_t ui32Line)
{
UARTprintf("\033[31;1m");
UARTprintf("Error:%d,File:%s,Line:%d\n"
"See I2C Status definitions in sensorlib\\i2cm_drv.h\n");
UARTprintf("\033[0m");
while(1)
{
;
}
}
void MPU9150AppI2CWait(void)
{
while((g_vui8I2CDoneFlag==0)&&(g_vui8ErrorFlag==0))
{
}
if(g_vui8ErrorFlag)
{
}
g_vui8I2CDoneFlag=0;
}
void ConfigureUART(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
UARTClockSourceSet(UART0_BASE,UART_CLOCK_PIOSC);
UARTStdioConfig(0,115200,16000000);
}

int main(void)
{
char a[2];
int_fast32_t i32Part[16],uiFPart[16];
uint_fast32_t ui32Idx,ui32CompDCMStarted;
float pfData[13];
float *pfAccel,*pfGyro,*pfMag,*pfEulers,*pfQuaternion;
pfAccel=pfData;
pfGyro=pfData+3;
pfEulers=pfData+6;
pfQuaternion=pfData+9;
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);//40Mhz
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
ConfigureUART();
UARTprintf("\033[2JMPU9150 Raw Example\n");
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C3);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

GPIOPinConfigure(GPIO_PD0_I2C3SCL);
GPIOPinConfigure(GPIO_PD1_I2C3SDA);
GPIOPinTypeI2CSCL(GPIO_PORTD_BASE,GPIO_PIN_0);
GPIOPinTypeI2C(GPIO_PORTD_BASE,GPIO_PIN_1);
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE,GPIO_PIN_2);//B2作为MPU9150中断信号的引入脚
GPIOIntTypeSet(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_FALLING_EDGE);
IntEnable(INT_GPIOB);
SysCtlPeripheralClockGating(true);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER0);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER1);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_I2C3);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_WTIMER5);

IntMasterEnable();
I2CMInit(&g_sI2CInst,I2C3_BASE,INT_I2C3,0XFF,0XFF,SysCtlClockGet());
MPU9150Init(&g_sMPU9150Inst,&g_sI2CInst,MPU9150_I2C_ADDRESS,MPU9150AppCallback,0);
MPU9150AppI2CWait();

ui32CompDCMStarted=0;
while(1)
{
MPU9150DataRead(&g_sMPU9150Inst,MPU9150AppCallback,0);
MPU9150AppI2CWait();
MPU9150DataAccelGetFloat(&g_sMPU9150Inst,pfAccel,pfAccel+1,pfAccel+2);
MPU9150DataGyroGetFloat(&g_sMPU9150Inst,pfGyro,pfGyro+1,pfGyro+2);

int_fast32_t fAccel[3],fGyro[3];
fAccel[0]=(int32_t)(pfAccel[0]);
fAccel[1]=(int32_t)(pfAccel[1]);
fAccel[2]=(int32_t)(pfAccel[2]);
fGyro[0]=(int32_t)(pfGyro[0]);
fGyro[1]=(int32_t)(pfGyro[1]);
fGyro[2]=(int32_t)(pfGyro[2]);

UARTprintf("\033[1;14H%010d %010d %010d\n\n",fAccel[0],fAccel[1],fAccel[2]);
UARTprintf("\033[2;14H%010d %010d %010d\n\n",fGyro[0],fGyro[1],fGyro[2]);
}
}

这是参照6050例程,在编译时报错无法生成。out文件

报错内容如图所示。谁能帮帮我解决呢?万分感谢