STM32f103 硬件I2C锁死解决办法

STM32f103 硬件I2C锁死解决办法

起因

最近刚好在玩STM32 Arduino 的板子, 使用U8G2驱动库驱动SSD1306 i2c 的屏幕 ,开始调试一切顺利,
直到后面我无意间,碰到了i2c总线, 突然卡住了, 这也引起了我的好奇心, 一直以来使用STM32f103这颗芯片几年了, 从来没有使用过STM32得硬件I2C通讯,一直听别人说,STM32的硬件I2C垃圾,会卡死,我一直不信,现在我真碰到了, 捂脸~~, 我也是一个死脑筋的人.
在这里插入图片描述

找到线索

我百思不得其解,于是我仿真看了一下硬件,确实是卡死在 I2C通讯上,说实话定位没有花好久,1个小时,捂脸~~, 原来是 I2C通讯的时候屏幕的I2C把SDA数据线拉低了, 一开始我也在百度找到有人说 ,模拟I2C给一个时钟脉冲, 我试了下 好像可以,又好像不可以, 具体是因为我使用镊子把SDA脚对地短路,SDA 和 SCL短接在一起试图让它卡死, 不过好像好了一点,大概代码是这样的

pinMode(PB10,OUTPUT);
while(digitalRead(PB11)){
		digitalWrite(PB10,HIGH);  
		delayMicroseconds(1);
		digitalWrite(PB10,LOW);  
		delay(1);
}
i2cinit();

进一步 探索

上述方法确实能解决一部分问题但是 还是有一点会卡死 , 奔着死磕到底的精神,我又又又 去百度了[捂脸]~~, 终于又找到一个方法,不过和上述方法类似 ,
        pinMode(PB10,OUTPUT);   
        for(int i = 0 ; i < 16 ; i ++){
             digitalWrite(PB10,LOW);
             delayMicroseconds(2);
             digitalWrite(PB10,HIGH);
             delayMicroseconds(2);                
        }
        Wire.begin();

不过这种方法确实让我感觉更好一点,当然要感谢 我们CSDN的大佬, 提供的思路;链接我贴在下面,
感谢,Hardware 大佬分享
https://blog.csdn.net/helaisun/article/details/107745934;

总结

遇到问题不要慌,先喝杯茶压压惊! 在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值