工具与软件:
所有人都很好
我正在连接一个 INA228 解决方案 STM32微控制器 输入电压。 但是、我在沟通时遇到了一个问题、我似乎无法解决。
设置详细信息:
- 微控制器: STM32h7 (使用 HAL 库)
- INA228 经由 I2C 连接
- 使用的 API: HAL_I2C_TRANSMIT (阻塞模式)
- I2C 时钟速度: 在100kHz 和400kHz 上进行测试
- 上拉电阻器: SDA 和 SCL 线路上的2.2 kΩ
- STM32h7中的 GPIO 配置:
GPIO_InitStruct。 MODE = GPIO_MODE_AF_OD;GPIO_InitStruct。 PULL = GPIO_NOPULL ;GPIO_InitStruct。 SPEED = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct。 替代 = GPIO_af4_I2C1;
问题:
我将尝试通过发送1字节数据在 INA228上写入指针寄存器、然后对该寄存器执行读取:
- 。 寄存器地址 (1字节)
我正在调用 HAL_I2C_INA228_ADDRESS<<1 Master_Transmit、txBuf、1、HAL_MAX_DELAY)
txBuf 包含寄存器的地址。
在大多数情况下、INA228以 A 响应 NACK . 不过、我曾尝试将 HAL_I2C_EVM Master_Transmit 放入循环中、并且 在 随机迭代中、器件正确响应且传输成功。 当它成功时、我尝试使用读取寄存器内容 HAL_I2C_EVM Master_Receive 但它失败、并出现错误 HAL_I2C_ERROR_AF (NACK)
- 使用 HAL_I2C_IsDeviceReady -->未检测到 INA228验证了 INA228的 I2C 地址、我在帖子中看到 HAL_I2C_IsDeviceReady 存在错误(我使用的是 V1.11.0)、因此我不再依赖它。
- 已使用逻辑分析仪检查波形;正在发送的数据似乎正确。
- 将 I2C 时钟速度降至100kHz -未观察到改进。
- 已尝试在寄存器地址字节和数据字节之间添加较小的延迟-问题仍然存在。
有人在使用 STM32 HAL 库的 INA228上遇到类似问题吗?
- 这是否与未记录的 INA228所需的时序或特定延迟有关?
- STM32 HAL 中是否有任何其他 I2C 设置或配置可能有助于解决此问题?
非常感谢您提供任何帮助或建议! 提前感谢