stm32f103c8t6 cubemx 关于I2C通信不通的若干问题解决方法
i2c调试过程中出现BUSY状态
- 对于I2的理论就不必多说。说一说现象,刚开始调试硬件i2c的时候发现,只要stm32一开始上电,程序运行到“I2C_WaitOnFlagUntilTimeout”时候,就会一直跳到“HAL_ERROR”中,也就说SDA引脚一直处于低电平状态。
- 发现通过调试“HAL_I2C_MspInit”函数,把原来的“__HAL_RCC_I2C1_CLK_ENABLE”注释掉,并在图中的位置添加“__HAL_RCC_I2C1_CLK_ENABLE”可以解决 busy状态问题。
- 如果问题没有解决请检查硬件上的问题,比如是否存在虚焊,SDA短路,时钟,电源等是否正常,或者对两个以上的I2C设备断电进行单独的测试。看看哪一个设备引起的SDA低电平状态。
- 总结:本方法适用于刚开始上电就出现BUSY状态,而不适用于偶尔出现busy状态的出现的死锁。
i2c调试过程中,向从设备发送地址,从设备无应答信号传给主设备
注意:本次调试中,STM32下面下挂两个i2c设备,在这里称为i2c device1和i2c device2。其中 i2c device2 本身没有时钟,时钟是通过i2c device1 输出时钟到 i2c dev