复位I2C外设后能不能恢复?
复位I2C外设后能不能恢复? 我试过,可以恢复,但要重新初始化一下I2C,不然寄存器是空的。 RCC复位后得加上 HAL_I2C_DeInit() 再 HAL_I2C_Init(),否则状态乱了。 可以恢复,但有时候需要延时一小段时间才行,不然总线卡死。 看你是软复位还是硬件强制复位,软复位一般都能稳妥恢复。 要注意复位前要关中断,否则可能出现中断进来了状态乱掉。 STM的I2C外设有点“娇气”,有时候还得拉高SCL恢复总线。 我在I2C异常处理中也会用RCC复位的方式,能救回来。 建议复位后检测一下 I2C_FLAG_BUSY,确认总线空闲再初始化。 你可以看 __HAL_RCC_I2C1_FORCE_RESET() 和 RELEASE_RESET() 的用法,官方库支持。 实在不行就手动模拟I2C释放总线,我以前调试EEPROM时这么搞的。
页:
[1]