I2C调试遇到的问题以及解决办法---“busy死锁状态”以及“从设备地址无应答”问题

i2c调试过程中出现BUSY状态

  1. 对于I2的理论就不必多说。说一说现象,刚开始调试硬件i2c的时候发现,只要stm32一开始上电,程序运行到“I2C_WaitOnFlagUntilTimeout”时候,就会一直跳到“HAL_ERROR”中,也就说SDA引脚一直处于低电平状态。
    在这里插入图片描述
  2. 发现通过调试“HAL_I2C_MspInit”函数,把原来的“__HAL_RCC_I2C1_CLK_ENABLE”注释掉,并在图中的位置添加“__HAL_RCC_I2C1_CLK_ENABLE”可以解决 busy状态问题。
    在这里插入图片描述
  3. 如果问题没有解决请检查硬件上的问题,比如是否存在虚焊,SDA短路,时钟,电源等是否正常,或者对两个以上的I2C设备断电进行单独的测试。看看哪一个设备引起的SDA低电平状态。
  4. 总结:本方法适用于刚开始上电就出现BUSY状态,而不适用于偶尔出现busy状态的出现的死锁。

i2c调试过程中,向从设备发送地址,从设备无应答信号传给主设备

注意:本次调试中,STM32下面下挂两个i2c设备,在这里称为i2c device1和i2c device2。其中 i2c device2 本身没有时钟,时钟是通过i2c device1 输出时钟到 i2c dev

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看电路的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值