STM32
直播中

张杰

8年用户 1378经验值
私信 关注
[问答]

stm32l452ret6 I2C接口锁死的原因?怎么解决?

首先,我手里有两个I2C设备,一个是OLED屏(0.66寸),一个是MPU6050(六轴)。这两个设备都是支持高速400K的clk。为了同步验证,我分别用I2C1和I2C2两个口和他们通讯。为了测试方便,买的都是现成方案,EMI和ESD电路基本上都没有做。但不影响整体效果测试。
其次,接上两个设备正常运行。当我提高外设读写函数调用频率时,16MS调用一次,OLED的正常显示,而MPU6050的数据突然消失了,通过串口打印log信息,发现程序出现超时错误,LDA一直低电平,总线锁死状态。让我很诧异,是不是买的芯片质量有问题,还是因为我杜邦线太长的缘故。为了后期PCB设计方便,我是把外部两个上拉电阻焊掉了,用的MCU的内部上拉。左想右想,我又把外部上拉电阻焊上,把内部上拉去掉。结果意想不到的好转。


回帖(1)

王璐

2024-4-28 17:54:40
STM32L452RET6 I2C接口锁死的原因可能有以下几点:

1. 硬件问题:I2C总线可能存在硬件连接问题,如线路过长、接触不良或电磁干扰等。这可能导致信号传输不稳定,从而引发I2C总线锁死。

2. 软件问题:程序中可能存在I2C通信的逻辑错误,如读写时序不准确、超时处理不当等。这些问题可能导致I2C总线无法正常工作。

3. 外设问题:OLED屏和MPU6050可能存在质量问题,导致在高速通信时出现问题。

为了解决这个问题,你可以尝试以下方法:

1. 检查硬件连接:确保I2C总线的连接正确,线路尽量短且接触良好。如果可能,使用屏蔽线以减少电磁干扰。

2. 降低通信速率:尝试降低I2C通信速率,如将400kHz降低到100kHz,看是否能解决问题。

3. 优化软件:检查I2C通信的时序和超时处理逻辑,确保它们符合I2C协议要求。

4. 使用外部上拉电阻:在I2C总线的SDA和SCL线上添加适当的外部上拉电阻,以提高信号稳定性。

5. 检查外设质量:尝试更换OLED屏和MPU6050,看是否仍然出现类似问题。

6. 使用I2C总线仲裁:如果I2C1和I2C2共用同一总线,可能存在总线仲裁问题。确保两个I2C设备在通信时不会发生冲突。

7. 软件调试:使用逻辑分析仪等工具,观察I2C总线上的信号波形,以便更好地了解问题所在。

通过以上方法,你应该能够找到导致I2C接口锁死的原因,并采取相应措施解决问题。
举报

更多回帖

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