STM32F103 CubeMX I2C



最近在做一个项目,由于实时性要求高所以想把串口通讯、I2C、SIP都通过DMA来完成。

先用CubeMx配置后生成工程,然后做串口DMA收发测试程序一切顺利,接下来搞了一天I2C,总是在不成功,逻辑分析仪上SDA、SCL只看到有一个脉冲,断点调试发现死锁在

while(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);

几乎放弃。后来看到:https://www.cnblogs.com/jackweibe/p/6056821.html 终于找到问题所在。

测试EEPROM:

特别要注意:I2C的地址是8位还是16位,如果是8位:

HAL_I2C_Mem_Write(&hi2c2, ADDR, i, I2C_MEMADD_SIZE_8BIT,&(I2C_Buffer_Write[i]),8, 1000)

HAL_I2C_Mem_Read(&hi2c2, ADDR, i, I2C_MEMADD_SIZE_8BIT,&(I2C_Buffer_Write[i]),8, 1000)

16位:

HAL_I2C_Mem_Write(&hi2c2, ADDR, i, I2C_MEMADD_SIZE_16BIT,&(I2C_Buffer_Write[i]),8, 1000)

HAL_I2C_Mem_Read(&hi2c2, ADDR, i, I2C_MEMADD_SIZE_16BIT,&(I2C_Buffer_Write[i]),8, 1000)

我就是在这里折腾了很久,切记。

后续再调试DMA……

你可能感兴趣的:(单片机开发,电子)