目前项目需要使用I2C设备,使用cubemx生成的I2C并使用DMA的代码无法正常运行。第一次使用I2C正常,如果还想再次使用,错误代码返回I2C在忙。我以为我哪里没有设置好,导致官方代码有问题,网上搜了一天仍然没有解决。和大佬讨论后,大佬说:像很多EEPROM等I2C设备,它的I2C速度没有STM32快,导致STM32发送数据后,I2C设备没有应答,然后导致我上述问题。最后使用逻辑分析仪发现,I2C从设备(EEPROM)是应答了的。真正的原因是在完成第一次I2C访问后,SCL一直处于低电平。没有恢复正常的高电平。
结论:网上看有些人也在用cubemx官方的I2C的DMA,我却无法正常使用DMA。目前不知道是什么原因。也肯能是我画的板子有问题。
解决:不使用DMA可以正常使用I2C。
总结:遇到问题,多用逻辑分析仪或者示波器分析。