STM32 HAL_I2C_Slave 从模式 为什么SCL会莫名拉低

发布者:admin 发布时间:2019-10-28 08:00 浏览次数:

  本帖最后由 vrxiaochouyu 于 2018-9-11 15:18 编辑

  1,有时有应答,有时没有应答。(具体情况是,开机第一次显示未应答,然后报超时错误。第二次直接卡死,如图所示。等了15分钟之后报了遇忙错误。第三次,就真的卡死了。SLC一直为低,程序一点反应都没有)

  2,有应答时,写入时时钟不见了。把主设备复位之后,SCL还是低的。为什么会把SCL拉低呢?

  做从的时候是从芯片(另外一个芯片,该设备没有从模式)接收数据。难道是主从需要切换设置(轮巡代码里有设置模式啊)?还是因为STM32自身I2C BUG所致(从网上找了修改HAL_I2C_MspInit函数BUG的代码,然并卵)?

  (更新)已从下面这篇文章解决卡死问题(并未根除,还偶尔卡死,但是概率低了很多)。但是还是没有应答。

  如果超时改为0,会是这样。这个后边的两个脉冲是怎么来的,难道是强制结束?

  (更新)已解决地址问题,原因是I2C信号太快了。读的信号是从第二个脉冲才开始的,所以永远都是错的。但还是有卡死问题。经常SCL就莫名的拉低了。貌似是和最开始差不多。最后截止的时候不应该给应答信号。但是应该如何解决呢?

  “6,当Master速度过快Slave端来不及处理时,Slave设备可以拉低SCL不放(SCL=0将发生“线与”)以阻止Master发送更多的数据。此时Master将视情况减慢或结束数据传送。”

  (更新)已解决,但是很崩溃。STM32一直在发应答。不发停止。如果size小于主机发的数量,就会卡死。只有遇到主机发停止,才会停止。自己不会停止。收不到停止就一直等啊等,就卡死了。

  ),有时地址对了,但是没有给应答信号(报09错误,即没有收到第10个SLC)。求大神指正。


上一篇:单片机中”引脚拉低”求解释    下一篇:错误的护肤习惯让你的颜值拉低一半?