STM32L4-HAL_I2C_STATE_BUSY_RX问题

问题描述

我无法进行i2c通信。在我的i2c总线中,我有4个板卡(STM32L4 Sensortiles),有时其中一个板卡阻塞了总线,其他板卡因此停止了通信。当我重置阻塞总线的那块板时,所有板子都重新开始工作。

在我的调试中,此错误发生在 HAL_I2C_GetState(&hi2c3)返回 HAL_I2C_STATE_BUSY_RX ,甚至是我的其他i2c函数 HAL_I2C_Slave_Receive_IT HAL_I2C_Slave 返回 HAL_OK

enter image description here

任何想法我在做什么错?谢谢。

解决方法

使用类似HAL的库会导致类似这样的问题。为什么?

  1. HAL用户无需了解您的硬件,因为魔术库将为您做一切。
  2. HAL用户通常不知道外围设备如何工作以及如何对其进行调试。
  3. HAL用户不必费心地使用神奇的HAL功能来查看问题所在。

通过调试器发布一些图像将无济于事。

您需要做什么:

    甚至获得最便宜的逻辑分析仪(在ebay上有10美元)并记录通信。查看从机是否将时钟或数据线保持在低电平。如果是,则将时钟针脚拨动9次以解锁线路
  1. 如果没有帮助使用RCC寄存器复位I2C外设的方法(必须在所有连接的板上实现)。