逗比爱吃比豆 发表于 2014-9-5 16:35:22

求助一个I2C问题

我写了一个I2C读取的函数,用最简单的查询,首先我已经证明该函数是可以正常运行,然后给他改了一下,添加了一个变量I2C_TypeDef* I2Cx,想让他可以被任何I2C口读取。然后我把I2Cx赋值为I2C1(PS:此函数在I2C1下已经可以可以使用),就无法运行,好像I2Cx根本没有被替换成I2C1,求大神指教,代码如下
 void I2C_Query_Read(I2C_TypeDef* I2Cx,u8 IMU_Address,u8 Address,u8 *IMU_Data,u8 NumByteToRead)
{
 /*I2C_TypeDef* I2Cx;
 #if USED_I2C1
 I2Cx = I2C1;
 #endif */
/********if I2C BUS busy,wait*********/
 Time_Out = Time_limit;
 while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY))
  (Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/**********start I2C*********/ 
 I2C_GenerateSTART(I2Cx, ENABLE);
 /***********check the EV5********/ 
 Time_Out = Time_limit;
 while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT ))
  (Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/************send Address to I2C*******/
 I2C_Send7bitAddress(I2Cx,IMU_Address, I2C_Direction_Transmitter);
/***********check EV6***********/ 
 Time_Out = Time_limit;
 while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
  (Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
 
 I2C_Cmd(I2Cx, ENABLE);
/**********send IMU's register Address************/
 I2C_SendData(I2Cx, Address);
/************clean EV8*****************************/ 
 Time_Out = Time_limit;
 while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_TRANSMITTED ))
  (Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/***********Start I2C again*********/ 
 I2C_GenerateSTART(I2Cx, ENABLE);
 Time_Out = Time_limit;
 while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT ))
  (Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
 
 I2C_Send7bitAddress(I2Cx,IMU_Address, I2C_Direction_Receiver);
 Time_Out = Time_limit; 
 while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
  (Time_Out--)?delay_ms(1):I2C_TimeOut(I2Cx);
/* While there is data to be read */
   while(NumByteToRead)
  {
    if(NumByteToRead == 1)
    {
     /* Disable Acknowledgement */
      I2C_AcknowledgeConfig(I2Cx, DISABLE);
      /* Send STOP Condition */
      I2C_GenerateSTOP(I2Cx, ENABLE);
  }
    /* Test on EV7 and clear it */
    if(I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED))
    {
      /* Read a byte from the MPU */
      *IMU_Data = I2C_ReceiveData(I2Cx);
      /* Point to the next location where the byte read will be saved */
      IMU_Data++;
     /* Decrement the read bytes counter */
      NumByteToRead--;
    }
 }

  /* Enable Acknowledgement to be ready for another reception */
  I2C_AcknowledgeConfig(I2Cx, ENABLE);
 
 
}
 

发表于 2014-9-5 17:02:20

RE:求助一个I2C问题

把你使用的代码发出来,仿真进去,看看I2Cx的值是否正确。

逗比爱吃比豆 发表于 2014-9-5 17:48:00

回复:求助一个I2C问题

回复第 2 楼 于2014-09-05 17:02:20发表:
把你使用的代码发出来,仿真进去,看看I2Cx的值是否正确。 

不是把代码贴出来了,我debug发现值时传进去了,你也可以拷贝代码仿真下,真的很奇怪。。

发表于 2014-9-11 16:27:17

RE:求助一个I2C问题

这个是你读写的代码,你调用这个函数时写的入口参数都是多少?
页: [1]
查看完整版本: 求助一个I2C问题