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.
工具/软件: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);}
很高兴看到供应商代理开始(但不承认)他们"相信"亲吻!"
海报展示了一个"怪兽计划"-有如此多的"活动部件"-成功的可能性是 、"非常小!"
“学校”——或“一般生活”——难道不能告诉 “同时玩很多球”——最好还是留给(认真)受过训练的表演者吗?
将代码简化为 :"最小、 单独聚焦的部分"、然后" 测试和验证"、"每个/每个"小(和隔离)部分"、以"测量和系统方式"-明确定义了"kiss"。 (保持简单学生!)
只有在-所有单个部件都经过"测试和验证"之后-才能启动逻辑组合-一次只需一个附加部件! (当然还有-测试/验证-全程的每一步!)
或许可以指出, "从不"(或至少是不有效) 是客户-用户的建议,例如 ,"kiss ->系统 和仔细地进行改进" , 这种方法是非常出色的。 真遗憾。