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:MPU6050 Sensorlib

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/564858/ccs-mpu6050-sensorlib

工具/软件:Code Composer Studio

您好!

我正在使用 TM4C123G 板、并按照"SW-TM4C-SENSORLIB-UG-1.1.pdf"中给出的示例连接 MPU6050、但我在生成 I2C 通信时遇到问题。 该示例是否足够、或者是否应该为通信添加额外的线路。 如果是、请 您提到我必须做的更改。  

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

    首先、检查 I2C 线路在 I2C 配置之后、但在任何传输开始之前总线空闲时是否为高电平?

    如果 SCL 和 SDA 都为高电平、则捕获 SCL 和 SDA 的示波器图、以查看微控制器和 MPU6050器件之间如何处理事务。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我正在努力进行 MPU 配置

    void MPUInitialize (void)(空)
    G_bMPU6050Done = false;
    MPU6050Init (&sMPU6050、&sI2CInst、0x68、MPU6050Callback、0);
    while (!g_bMPU6050Done);  
    //为+/- 4g 加速计范围配置 MPU
    //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);

    //config MPU +- 500 d/sec 陀螺仪范围
    G_bMPU6050Done = false;
    MPU6050ReadModifyWrite (&sMPU6050、MPU6050_O_gyro_config、~MPU6050_gyro_config_FS_SEL_M、
    MPU6050_gyro_config_FS_SEL_500、MPU6050Callback、0);
    while (!g_bMPU6050Done);

    在 main.c 中声明、但在 MPU6050.C 中 MPU6050Callback 函数被声明为静态 我实际上无法 调用它们。 我尝试通过 NULL、我认为它也不能正常工作。 另一件事是如何准确地确定我使用的 I2C (I2C1、I2C2或 I2C3)  

    谢谢、
    Vishnu

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

    检查 sI2CInst 结构。 它应该会告诉您正在使用哪个 I2C。 正如我之前提到的、根据正在使用的 I2C 模块、检查与其对应的 I2C 信号 SCL 和 SDA 是否空闲。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉问这个基本问题、因为我对这个字段不熟悉 、我如何检查与其对应的 SCL 和 SDA 是否空闲。

    void I2C1Init (void)
    {
    //clok
    时钟= SysCtlClockFreqSet ((SYSCTL_OSC_INT | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、12000000);
    //启用 I2C 模块1
    的时钟;SysCtl_Periph_I2CP1_
    
    
    
    
    
    
    
    
    
    引脚(GPIO_RESET_GPIOPT_GPIO6_GP1_);//为 GPIOP1_GPIOPT1_RESET_GPIOPT_6引脚配置 GPIOPT_GPIOPT_IP_IP_PHIN 引脚;GP1_引脚1 (GP1_IP_IP_IP_IP_IP_IP_GPIOPT_IP_IP_IP_IP_RESET_GP1_引脚1);GP1_IP_IP_IP_IP_IP_IP_IP_IP_IP_IP_IP_IP_GPIP_IP_6 (GPIOPT_IP_IP_IP_GPIP_GPIP_GPIP_GPIP_GPIP_6 (GPIP_IP_IP_IP_
    //启用和初始化 I2C1主模块使用系统时钟
    // I2C1模块。 I2C1传输速率设置为400kbps
    I2CMasterInitExpClk (I2C1_base、时钟、true);
    //清除 I2C FIFO
    HWREG (I2C1_base + I2C_O_FIFOCTL)= 80008000;
    //I2CMInit (&sI2CInst、I2C1_base、INT_I2ff、0xC1 0xFF、时钟);
    } 

    这是我的 I2C 初始化。 我所面临的问题是每次在 TM4C123G 调试器上调试代码时、while 循环中都会停止。

    G_bMPU6050Done = false;
    MPU6050Init (&sMPU6050、&sI2CInst、0x68、MPU6050Callback、 0);
    while (!g_bMPU6050Done); 

    我已经阅读了很多文章、但我找不到任何好的答案、可以帮助我。

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、我想知道、我在 I2C 初始化中遇到了任何错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Vishnu

    初始化看起来正确。 为了了解协议和实现、我建议将 I2C 应用手册作为 TM4C129x 器件的自读文件。

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

    Amit Ashara、您好!

    感谢大家的支持、我现在能够更清楚地理解。 但在调试期间、我发现 MPU6050初始化失败。

    如上图所示

    MPU6050Init (&sMPU6050、&sI2CInst、0x68、MPU6050Callback、0); 

    函数返回零。 因此 、它自身的第一次初始化会遇到一些问题。  因此、我想将"PU6050Callback"替换为 NULL、它也以相同的方式工作。 您能用什么方式帮助我吗? 我还 关注 了您在以下链接中的对话

      

    谢谢你。

    Vishnu

     

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

    您是否检查了函数返回0的条件? 换言之、0返回代码用于哪个错误?