崩溃!!!!!! 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个读取循环独立书写,仍然丢失一个脉冲.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
rogerllg
1楼-- · 2019-12-13 06:42
有解决不? 我也模拟,在103上是正常的,在401上就遇到了SDA非常吃电流,电压被拉到了2V,I2C有时候成功,有时候不成功~
OneRain
2楼-- · 2019-12-13 11:05
说实话,模拟I2C搞不好,大部分都是还没搞懂I2C的规定!!!
PICTURE
3楼-- · 2019-12-13 12:42
 精彩回答 2  元偷偷看……
ysu_er
4楼-- · 2019-12-13 16:21
模拟出问题,肯定是你没弄好呗
dellric
5楼-- · 2019-12-13 20:18
杀个画板子的祭祭天!
justdomyself
6楼-- · 2019-12-13 23:20
SPI多任务中时序可以打断不影响使用,iic没试过  

一周热门 更多>