×
单片机 > 单片机程序设计 > 详情

STM32F103 CubeMX I2C

发布时间:2020-05-19 发布时间:
|

最近在做一个项目,由于实时性要求高所以想把串口通讯、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……




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机的数码管动态扫描方法