崩溃!!!!!! 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条回答
bbglx
1楼-- · 2019-12-12 20:15
一般诡异的问题,关中断试试
zhuyihua001
2楼-- · 2019-12-12 21:58
谢谢回复,中断的话,一般会导致脉冲变宽,不可能侵入子函数 ,导致跳过某段程序,丢脉冲啊.
salahading
3楼-- · 2019-12-12 23:09
慢慢调试吧
avr-arm
4楼-- · 2019-12-13 01:23
 精彩回答 2  元偷偷看……
Micro2008Chen
5楼-- · 2019-12-13 02:03
第8的时候怎么没有拉好
Micro2008Chen
6楼-- · 2019-12-13 06:22
拉高1111111111111111

一周热门 更多>