请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C123GH6PM 工具/软件:Code Composer Studio
大家好、
我一直在尝试使用 Tm4c123gxl launchpad 读取传感器数据(Gy-521)。 但我的代码有问题 、我确信我的电路是好的。 示例代码无法打印数据。
通过一些跟踪(使用 UARTprintf()),我必须知道代码在第一个 while (!g_bMPU6050Done)循环中被卡住,而不离开代码。
我不熟悉这一点、因此请帮助我了解以下代码。 谢谢你
#include #include #include #include #include #include include "sensorlib/i2cm_drv.h" #include "sensorlib/hw_mpu6050.h" #include "sensorlib/mpu6050.h" #include "inc/hw_ins.h" #include "inc/hw_intru.ides.h" #driveinc #include "intrinc/drive.h"#driveintrintr.intrintr.包含"#drive.h"#driveintrintrintr.iw.iw.intr.inc #include"#drive.h/drive.h"#include"#drive.h/driveintrinc #drive.h/intrintrintrintrintr.iw.intr.inc #include"#include"#drive.h/drive.h"intrintrintrintr.iw.iw.iw.iw.intr.inc #include"#include"#drive.h/drive.h"#include"#drive.h"intr.iw.iw.intr.iw.iw.intr.intr.ine. SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz); //设置调试 UART SysCtlPeripheralEnable (SYSCTL_Periph_UART0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); UARTStdioConfig (0、115200、SysCtlClockGet ()); //启用 I2C 模块0 SysCtlPeripheralEnable (SYSCTL_Periph_I2C0); //复位模块 SysCtlPeripheralReset (SYSCTL_Periph_I2C0); //启用包含 I2C 0的 GPIO 外设 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); //为端口 B2和 B3上的 I2C0功能配置引脚复用。 GPIOPinConfigure (GPIO_PB2_I2C0SCL); GPIOPinConfigure (GPIO_PB3_I2C0SDA); //为这些引脚选择 I2C 功能。 GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2); GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3); //启用和初始化 I2C0主机模块。 使用的系统时钟 // I2C0模块。 // I2C 数据传输速率设置为400kbps。 I2CMasterInitExpClk (I2C0_BASE、SysCtlClockGet ()、true); //清除 I2C FIFO HWREG (I2C0_BASE + I2C_O_FIFOCTL)= 80008000; //初始化 I2C 主驱动程序。 I2CMInit (&g_sI2CMSSimpleInst、I2C0_BASE、INT_I2C0、0xff、0xff、 120000000); } // //完成 MPU6050命令后设置的布尔值。 // volatile bool g_bMPU6050Done; // 此示例提供的函数在 MPU6050 //事务完成后作为回调提供//。 // void MPU6050Callback (void * pvCallbackData、uint_fast8_t ui8状态) { // //查看是否发生错误。 // if (ui8Status!= I2CM_STATUS_SUCCESS) { // //发生错误,所以如果需要,请在此处处理。 // } // ////表示 MPU6050传输已完成。 // G_bMPU6050Done = true; } // // MPU6050示例。 // void MPU6050Example (void) { fAccel[3]、fGyro[3]; tI2CMInstance sI2CInst; tMPU6050 sMPU6050; // 初始化 MPU6050。 此代码假定 I2C 主设备实例 //已初始化。 // G_bMPU6050Done = false; MPU6050Init (&sMPU6050、&sI2CInst、0x68、MPU6050Callback、0);
while (!g_bMPU6050Done) { } // //将 MPU6050配置为+/- 4 g 加速计范围。 // G_bMPU6050Done = false; MPU6050ReadModifyWrite (&sMPU6050、MPU6050_O_ACCEL_CONFIG、 ~MPU6050_ACCEL_CONFIG_AFS_SEL_M、 MPU6050_ACCEL_CONFIG_AFS_SEL_4G、MPU6050Callback、0); while (!g_bMPU6050Done) { } // //循环从 MPU6050永久读取数据。 通常、此过程 //将在后台完成、但出于本示例的目的 、//它显示在无限循环中。 // while (1) { // //请求从 MPU6050读取另一个数据。 // G_bMPU6050Done = false; MPU6050DataRead (&sMPU6050、MPU6050Callback、0); while (!g_bMPU6050Done) { } // //获取新的加速计和陀螺仪读数。 // MPU6050DataAccelGetFloat (&sMPU6050、&fAccel[0]、&fAccel[1]、 fAccel[2]); MPU6050DataGyroGetFloat (&sMPU6050、&fGyro[0]、&fGyro[1]、&fGyro[2]); // //使用新的加速计和陀螺仪读数执行一些操作。 // } } int main() { InitI2C0(); MPU6050Examples();
UARTprintf ("02x\n"、MPU6050DataGyroGetFloat (&sMPU6050、&fGyro[0]、&fGyro[1]、&fGyro[2]);
返回(0);}