STM32
直播中

李华

7年用户 1349经验值
私信 关注
[问答]

使用CubeMX生成的STM32G0B1工程,通过I2C读取EEPROM时,TXIS位一直保持0导致无法发送从机地址怎么解决?

使用CubeMX生成的STM32G0B1工程,通过I2C读取EEPROM时,TXIS位一直保持0,导致无法发送从机地址。
调用的函数时:HAL_I2C_Mem_Read( hi2c1, EEPROM_ADDRESS | EEPROM_READ, address, I2C_MEMADD_SIZE_16BIT, pOutBuff, outBuffLen, 100);
address为16位长度的。
根据手册,TXIS位发送中断状态位,在主发送模式时,当每个字节发送完成后,TXIS位才置1。那么I2C初始化完成后,TXIS位默认为0,在I2C_RequestMemoryRead()函数中先调用I2C_WaitOnTXISFlagUntilTimeout()检查TXIS位不是永远会失败吗?
该如何解决?


回帖(1)

李军

2024-4-3 16:18:21
首先,您需要确保以下几点:

1. 确认您已正确初始化了I2C外设。检查您的CubeMX配置是否正确,并确保您已将引脚配置为I2C模式。

2. 根据您提供的代码,确认您所使用的地址是否正确。`EEPROM_ADDRESS`应为7位I2C从机地址。

3. 确认您的EEPROM设备是否正常工作。您可以尝试使用其他方法(如模拟I2C)读取EEPROM以验证其功能。

如果以上步骤都没有解决问题,您可以尝试以下方法来解决TXIS位一直保持为0的问题:

1. 检查时钟源配置是否正确。确保您的I2C时钟源配置正确,并且时钟频率与EEPROM设备的要求相匹配。

2. 调整I2C外设的时钟频率和超时时间。根据您的系统时钟频率和EEPROM设备的性能,您可能需要增加I2C的时钟频率或超时时间。

3. 确保在发送数据之前,I2C总线上没有其他设备正在使用。如果有其他设备在使用I2C总线,则可能会导致冲突和错误。

4. 检查I2C线路连接和电气特性。确保I2C线路连接正确,并且使用适当的上拉电阻。

如果以上方法仍然无法解决问题,您可能需要使用示波器或逻辑分析仪来监视I2C信号并排查故障。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分