智能车制作

标题: 求问大神,I2C等待应答信号时间过长,程序卡死 [打印本页]

作者: 陈墨瞳彡~    时间: 2017-1-17 22:11
标题: 求问大神,I2C等待应答信号时间过长,程序卡死
求问大神,I2C等待应答信号时间过长,程序卡死可以怎么解决啊?
等待应答信号的程序如下:
uint8 LPLD_I2C_WaitAck(I2C_Type *i2cx, uint8 is_wait)
{
  uint16 time_out;
  //time_out=0;
//  PTE0_O=0;
//  PTE12_O=0;
  if(is_wait == I2C_ACK_ON)
  {
    while(!(i2cx->S & I2C_S_IICIF_MASK))
    {
      if(time_out>70000) //如果等待超时,强行退出
      {
//        PTE0_O=1;
//        PTE12_O=0;
//        if(PITCounter>200)
//          MPU6050_Init();
        //i2cx->S |= I2C_S_IICIF_MASK;
        break;
      }
      else time_out++;
    }
    i2cx->S |= I2C_S_IICIF_MASK;
  }
  else
  {
    //关闭I2C的ACK
    i2cx->C1 |= I2C_C1_TXAK_MASK;
  }
  if(time_out>60000)
    return 1;
  else return 0;
}



作者: aytc100    时间: 2017-1-18 06:19
拿双通道示波器去看有没有ACK啊
作者: 陈墨瞳彡~    时间: 2017-1-18 22:53
具体该怎么操作呢?能说的再详细一点吗?
作者: 陈墨瞳彡~    时间: 2017-1-19 00:15
aytc100 发表于 2017-1-18 06:19
拿双通道示波器去看有没有ACK啊

噢,他那个卡死在里面以后,SCL信号和其他信号,包括PWM都是乱的


作者: aytc100    时间: 2017-1-19 11:36
陈墨瞳彡~ 发表于 2017-1-19 00:15
噢,他那个卡死在里面以后,SCL信号和其他信号,包括PWM都是乱的

那是卡死的结果,不是原因

作者: 陈墨瞳彡~    时间: 2017-2-9 15:00
aytc100 发表于 2017-1-19 11:36
那是卡死的结果,不是原因

就是说没有ACK,那可能的原因有哪些呢?


作者: aytc100    时间: 2017-2-10 14:13
陈墨瞳彡~ 发表于 2017-2-9 15:00
就是说没有ACK,那可能的原因有哪些呢?

从机挂了,或者主机收到了假的ack。这个需要你用示波器去查啊,光水帖子是不行的。





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2