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……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章