请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432E411Y 主题中讨论的其他器件: HDC1080
尊敬的专家:
我使用 I2CMSP432E4驱动程序的修补版本已有一段时间,请参阅相关文章
。
现在、我认为现在是升级到 SimpleLink 4.10的时候了。 但我遇到了新驱动程序问题、需要帮助。
我们有一个 HDC1080通过连接器连接到 MSP432E411Y。 此连接可能会断开并再次连接。 I2C 通信应在重新连接后恢复、并使用修补的驱动程序进行。 使用新的驱动程序时、我会遇到一种奇怪的行为:
- 在传感器已连接的情况下启动 UC ->传输状态0 ->确定
- 断开传感器->变速器状态-1
- 重新连接 传感器->变速器状态-8
我可以重复步骤2和3多次、状态可重现、但不正常。
然后、我在 I2CMSP432E4 .C 的第963行中设置一个断点 (我将 I2C.c 和 I2CMSP432E4 .c 复制到了我的项目中、以获取调试信息。)
我在连接传感器时单步执行代码(按 F6键)。 返回值和传输状态变为0 ->正常。
我让程序再次运行。 现在工作正常:
- 断开传感器->变速器状态-5
- 重新连接 传感器->变速器状态0
我可以重复步骤1和2多次、状态可重现且正常。
我使用以下代码打开驱动程序:
I2C_Params i2cParams; I2C_Params_init (&i2cParams); i2cParams.transferMode = I2C_MODE_BLOCKING; i2cParams.bitrate = I2C_100kHz; /*检查 I2C 是否已打开- * I2C 可能已经被另一个 HAL 模块打开、例如 *扩展板或 MAC 地址存储驱动程序的 Board_LHC04_I2C8 * I2C_SENSOR_ASSERT (i2cIdx < I2C_COUNT); I2CMSP432E4_Object * i2cObjPtr = I2C_CONFIG[i2cIdx].object; if (i2cObjPtr -> isOpen) { objPtr->i2cHandle =(I2C_Handle)&(I2C_CONFIG[i2cIdx]); /*检查正确的设置*/ i2C_sensor_assert (i2cObjPtr -> transferMode = i2cParams.transferMode); i2C_sensor_assert (i2cObjPtr -> bitrate = i2cParams.bitrate); } 其他 { // I2C_open 通过 GPIOPadConfigSet()清除 AMSEL 位,因此不再有 ADC 输入 objPtr->i2cHandle = I2C_open (i2cIdx、&i2cParams); } i2C_sensor_assert (objPtr ->i2cHandle!= NULL);
要发送数据的代码:
静态 bool HDC1080config (I2C_SensorObject * self) { //将 HDC1080配置为组合温度和湿度测量,每个分辨率为14位*/ uint8_t writeBuffer[]= { HDC_CONFIG、//写入 HDC1080配置寄存器(指针寄存器的设置) 0x10、0x00 // MSB 优先、仅位12 = 1:结合测量温度和湿度、高精度 }; // I2C_Transaction i2cTransaction; // i2cTransaction.slaveAddress = I2C_ADR_HDC1080; // i2cTransaction.writeBuf = writeBuffer; // i2cTransaction.writeCount = sizeof (writeBuffer); // i2cTransaction.readHandf = NULL;// i2ctransfer_readtransfer...(i2i2ctransfer_read0);// i2c.return = sizeof (i2cTransaction.readHandle);// i2i2cTransfer_readHandle;// i2i2ctrans self->i2cTransaction.slaveAddress = I2C_ADR_HDC1080; self->i2cTransaction.writeBuf = writeBuffer; self->i2cTransaction.writeCount = sizeof (writeBuffer); self->i2cTransaction.readBuf =空; self->i2cTransaction.ReadCount = 0; self->i2cTransaction.status = I2C_STATUS_SUCCESS; 返回(I2C_TRANSFRAT(self->i2cHandle,&(self->i2cTransaction)); }
您是否可以尝试重现问题并解决问题?