崩溃!!!!!! stm32f407 模拟i2c,丢失脉冲,非常 非常 诡异

2019-12-12 18:24发布

本帖最后由 zhuyihua001 于 2014-10-18 17:02 编辑

未命名.JPG (132.44 KB, 下载次数: 0) 下载附件 2014-10-18 16:44 上传


u8 IICReceiveData( void )

{  
          int  j=0;
          int  tmp=0;  

             TP_SET_I2C_DATA_HIGH;
              for(j=0;j<200;j++);
       
                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);  
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);

                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x80;    //第1脉冲
                                       
                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);
              
                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x40;   //第2脉冲

                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);
              
                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x20;  //第3脉冲
                                       
                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);
              
                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x10;  //第4脉冲

                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);

                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x08;  //第5脉冲

                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);
              
                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x04;  //第6脉冲
                                       
                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);

                  if (TP_GET_I2C_DATA_BIT)  tmp |= 0x02 ; //第7脉冲

                 ///////////////////  
                                       
                  TP_SET_I2C_CLK_LOW;  
                  for(j=0;j<200;j++);
                  TP_SET_I2C_CLK_HIGH;
                  for(j=0;j<200;j++);

                 if (TP_GET_I2C_DATA_BIT)  tmp |= 0x01;  //第8脉冲

                  ///////////////////

                  TP_SET_I2C_CLK_LOW;
                  I2C_delay();
                                       

          return tmp;

}


i2c读取触摸屏,调试很久,用了逻辑分析仪才发现问题,
第一个数据脉冲丢失了一个脉冲,导致后面的时序错误.

读取数据是调用 IICReceiveData();理论每个数据时钟应该是一样的,
现在现象是第一个数据丢失了脉冲.

我特意把8个读取循环独立书写,仍然丢失一个脉冲.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。