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.

[参考译文] CCS/TM4C123GH6PM:具有 TM4C123gxl Launchpad 的 MPU6050

Guru**** 2465890 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/683082/ccs-tm4c123gh6pm-mpu6050-with-tm4c123gxl-launchpad

器件型号: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);}


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我理解您的沮丧、但我无法为您调试代码。 首先、我调试每个人的程序是不切实际的。 请求太多了。 我能做的最好的事情就是回答具体问题、或许还能提供一些建议。

    我建议您将代码分解为简单的步骤、而不是尝试对整个代码进行调试。 在这种情况下、第一步可能是验证您是否可以正确配置 I2C 引脚。 这通常可以通过逻辑分析仪的数字示波器进行验证。

    下一步是查看您是否可以与 MPU6050通信。 我建议您从简单的测试开始、例如读取"我是谁"寄存器。 (寄存器117.)

    通过简单的小步骤进行调试不仅有助于您识别过程中的问题、还可以让其他人更有帮助、因为更容易识别问题的根源、因为您的代码范围会更小。 另外请记住、我们其他人通常不会拥有您的特定硬件。 我听说用于 MPU9150的 TivaWare 中的示例也适用于 MPU6050、但我尚未亲自验证。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴看到供应商代理开始(但不承认)他们"相信"亲吻!"   

    海报展示了一个"怪兽计划"-有如此多的"活动部件"-成功的可能性是 、"非常小!"

    “学校”——或“一般生活”——难道不能告诉 “同时玩很多球”——最好还是留给(认真)受过训练的表演者吗?

    代码简化为 :"最小、 单独聚焦的部分"、然后" 测试和验证"、"每个/每个"小(和隔离)部分"、以"测量和系统方式"-明确定义了"kiss"。  (保持简单学生!)  

    只有在-所有单个部件都经过"测试和验证"之后-才能启动逻辑组合-一次只需一个附加部件!   (当然还有-测试/验证-全程的每一步!)

    或许可以指出, "从不"(或至少是不有效) 是客户-用户的建议,例如 ,"kiss ->系统 和仔细地进行改进" ,  这种方法是非常出色的。   真遗憾。