求助一个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);
}
RE:求助一个I2C问题
把你使用的代码发出来,仿真进去,看看I2Cx的值是否正确。回复:求助一个I2C问题
回复第 2 楼 于2014-09-05 17:02:20发表:把你使用的代码发出来,仿真进去,看看I2Cx的值是否正确。
不是把代码贴出来了,我debug发现值时传进去了,你也可以拷贝代码仿真下,真的很奇怪。。
RE:求助一个I2C问题
这个是你读写的代码,你调用这个函数时写的入口参数都是多少?
页:
[1]