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.

[参考译文] RTOS/MSP432P401R:使用 I2C 连接 MPU9250、但传输功能不起作用

Guru**** 2553450 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/688903/rtos-msp432p401r-using-i2c-to-connect-with-mpu9250-but-transfer-function-doesn-t-work

器件型号:MSP432P401R

工具/软件:TI-RTOS

您好!

我正在将 MPU 用于项目、因此 i2c 传输不起作用。 由于我使用块模式、i2c 会无限期保持锁定、但在回调模式下、它也不会进行传输。 我认为错误是它无法识别从器件。 我已经检查的唯一内容是 MPU9250的地址是正确的(0x68)。

是否有任何想法、可能会出什么问题?

P.D.:代码:

I2C_Handle i2c;
I2C_Params 参数;
I2C_Transaction i2cTransaction;
uint8_t txBuffer[1];
uint8_t rxBuffer;
I2C_Handle ret;

I2C_PARAMS_INIT (params);
// params.transferMode = I2C_MODE_CALLACK;
params.transferCallbackFxn =空;
params.bitrate = I2C_400kHz;
I2C = I2C_open (Board_I2C_TMP、params);

txBuffer[0]= regAddr;

i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;

i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 1;

i2cTransaction.slaveAddress = 0x68;

RET = I2C_transfer (i2c、&i2cTransaction);

if (ret == NULL){
System_printf ("I2C 未传输\n"\});

如果(RET){
System_printf ("I2C 执行了传输\n");

system_flush();

I2C_Close (i2c);

非常感谢!!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否能够使用资源管理器中的一个示例验证操作以确认硬件是否正常工作?
    dev.ti.com/.../


    下面是一个包含一些故障排除建议的链接: www.ti.com/.../slaa734a.pdf

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

    您好、再说一次、

    感谢您提供示例链接、这对您有很大帮助。 我在 MSP_EXP432文件中发现了问题、引脚 未被很好地引用。 在本示例中,使用以下代码:

    CONST I2CMSP432_HWAttrsV1 i2cMSP432HWAttrs[MSP_EXP432P401R_I2CCOUNT ={


    baseAddr = EUSCI_B1_base、
    .intNum = INT_EUSCIB1、
    .intPriority =(~0)、
    时钟源= EUSCI_B_I2C_CLOCKSOURCE_SMCLK、
    .dataPin = I2CMSP432_P6_4_UCB1SDA、
    clkPin = I2CMSP432_P6_5_UCB.S
    };

    但在我的代码中、不显示.dataPin 和.clkPin 的部分、也不接受它。

    我尝试在此部分中定义引脚、然后在主代码中调用函数 init I2C:

    void MSP_EXP432P401R_initI2C (void)

    /*分别将引脚6.4和6.5配置为 SDA 和 SCL。 *
    MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、
    GPIO_PIN4 | GPIO_PIN5、GPIO_PRIMARY_MODULE_FUNCTION);

    /*初始化 I2C 驱动程序*/
    I2C_init();

    但是、它也不起作用。

    有什么想法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    typedef struct I2CMSP432_HWAttrsV1{
    /*! EUSCI_B_I2C 外设的基地址*
    uint32_t baseAddr;
    /*! EUSCI_B_I2C 外设的中断编号*
    uint32_t intNum;
    /*! EUSCI_B_I2C 外设的中断优先级*
    uint32_t intPriority;
    /*! EUSCI_B_I2C 时钟源*
    uint8_t 时钟源;
    /*! EUSCI_B_I2C 时钟引脚配置*
    uint16_t clkPin;
    /*! EUSCI_B_I2C 数据引脚配置*
    uint16_t dataPin;
    }I2CMSP432_HWAttrsV1; 

    您是否正在使用最新版本的 SDK?  

    此致、

    Chris

    您能否显示结构 I2CMSP432_HWAttrsV1的定义?  

    您应该能够在 I2CMSP432.h 中找到它