好的,明白了,我现在是这样设计I2C初始化前就执行P_SW2 |= 0x80;我后面都不对P_SW2的EAXSFR位清0,这样 ...
就是这个意思。我给你的例程正常吧? 梁工 发表于 2023-3-24 09:56
就是这个意思。我给你的例程正常吧?
梁工,您给我的例程单独测试是正常的,
但是我稍微修改你的例程关联I2C设备地址和数据后,
连续多次按复位按键后出现I2C崩溃了,
怎么解决此问题,谢谢。
示波器抓到I2C异常的波形如下图:
我稍微修改后的代码如下:
从设备抓着数据线不放了,排查从机。 梁工 发表于 2023-3-24 16:13
从设备抓着数据线不放了,排查从机。
大概等45分钟I2C又自行恢复正常了 本帖最后由 ilysmile 于 2023-4-19 22:57 编辑
大哥,你的这个问题解决了吗?我用硬件IIC读取MPU6050的数据,在init6050的时候也是卡在了这个循环,你这个是怎么解决的呀?
wait函数修改成梁工那种的也不行。函数如下:
void HardIIC_init()
{
P_SW2 |= 0x30; //I2C¹¦ÄܽÅÑ¡Ôñ£¬0x00:P1.5,P1.4; 0x10:P2.5,P2.4; 0x30:P3.2,P3.3
I2CCFG = 0xe0; //ʹÄÜI2CÖ÷»úģʽ
I2CMSST = 0x00;
}
void HardIIC_Wait()
{
u16 i;
for(i=0;i<1000;i++){
if((I2CMSST & 0x40) != 0) break;
}
I2CMSST &= ~0x40;
}
ilysmile 发表于 2023-4-19 22:54
大哥,你的这个问题解决了吗?我用硬件IIC读取MPU6050的数据,在init6050的时候也是卡在了这个循环,你这个 ...
你是在什么情况下出现这个问题?是不是在单片机复位出现这个问题呢? 980578873 发表于 2023-4-20 10:07
你是在什么情况下出现这个问题?是不是在单片机复位出现这个问题呢?
在init MPU6050的程序里,写寄存器的时候,进入了死循环 ilysmile 发表于 2023-4-22 11:53
在init MPU6050的程序里,写寄存器的时候,进入了死循环
找到原因了,需要给函数开始前后加上 P_SW2 |= 0x80;P_SW2 &= 0x7f;就好了
所以init函数这么写就行了:
void HardIIC_init()
{
P_SW2 |= 0x80;
I2C_S1 =1; //I2C¹¦ÄܽÅÑ¡Ôñ£¬00:P1.5,P1.4; 01:P2.5,P2.4; 11:P3.2,P3.3
I2C_S0 =1;
I2CCFG = 0xe0; //ʹÄÜI2CÖ÷»úģʽ
I2CMSST = 0x00;
P_SW2 &= 0x7f;
} 我也是一直停留在这while语句这里,究竟是什么问题引起的,我将SCL引脚接一下地就可以正常使用
页:
1
[2]