中级会员
 
- 积分
- 419
- 金钱
- 419
- 注册时间
- 2015-7-5
- 在线时间
- 47 小时
|

楼主 |
发表于 2015-12-25 14:36:13
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
问题找到了,但是我在读取MPU 0X75收到的数据时0XD1,不对啊应该是0X68才是,感觉多收了一个应答信号,如果0XD1>>1==0x68了,但是,这样问题又来了,一个八位数据的最高位丢失了,难道是我程序写错了?
贴出来求指教啊~~
u8 I2C_Read_Byte(u8 Reg)
{
u8 data=0;
while(I2C_GetFlagStatus(I2C2,I2C_FLAG_BUSY)); //检测总线忙
I2C_GenerateSTART(I2C2,ENABLE);//产生I2Cx传输START条件
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_MODE_SELECT)); //EV5
I2C_Send7bitAddress(I2C2,0xD0,I2C_Direction_Transmitter);//向指定的从I2C设备传送地址字
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //EV6
I2C_SendData(I2C2,Reg);//通过外设I2Cx发送一个数据
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //EV8
I2C_GenerateSTART(I2C2,ENABLE);//产生I2Cx传输START条件
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_MODE_SELECT)); //EV5
I2C_Send7bitAddress(I2C2,0xD0,I2C_Direction_Receiver);//向指定的从I2C设备传送地址字
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
//I2C_AcknowledgeConfig(I2C2,DISABLE);//使能或者失能指定I2C的应答功能
//if(I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_BYTE_RECEIVED)); //VE7_1
data = I2C_ReceiveData(I2C2);//返回通过I2Cx最近接收的数据
I2C_AcknowledgeConfig(I2C2,DISABLE);//使能或者失能指定I2C的应答功能
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_BYTE_RECEIVED)); //VE7
I2C_GenerateSTOP(I2C2,ENABLE);//产生I2Cx传输STOP条件
I2C_AcknowledgeConfig(I2C2,ENABLE);//使能或者失能指定I2C的应答功能
return (data);
} |
|