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

求助一个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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版