I2C主机卡在Busy位是什么原因导致的呢?
I2C主机卡在Busy位是什么原因导致的呢? 很可能是上次通信没正常结束,SCL或SDA被拉低了。 我遇到过一次是从机掉电,SDA一直被拉住,主机就卡Busy了。 用逻辑分析仪看一下电平,看看是不是总线真的被占住了。 有时候中断退出太快也会导致I2C状态没清干净,Busy不掉。 可以手动拉高SCL模拟几个时钟,强行释放总线试试看。 有没有调用 HAL_I2C_DeInit() 后再 Init()?不然硬件状态恢复不了。 我之前加了一个超时处理,检测Busy太久就软复位I2C外设。 看下是不是双主机冲突?另外一个主机也可能占着总线。 如果是STM32,有些芯片I2C外设确实容易卡死,需要RCC复位才能恢复。 建议你每次通信前都检查一下 I2C_FLAG_BUSY,避免堵住主流程。
页:
[1]