你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助一个I2C问题

[复制链接]
逗比爱吃比豆 提问时间:2014-9-5 16:35 /
我写了一个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);
 
 
}
 
收藏 评论3 发布时间:2014-9-5 16:35

举报

3个回答
回答时间: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问题

这个是你读写的代码,你调用这个函数时写的入口参数都是多少?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版