我用STM32F0使用IIC总线控制AD7745采集电容值, 写的时候一切正常,比方说写单次测量模式或者连续测量, 通过示波器观看RDY以及IIC波形都很正常, 写那个转换时间间隔,也可以,由此证明硬件电路应该没问题吧, 可是读的时候,无论怎么读,读的数据都是0x07, 就是找不出是哪儿的问题,比方说读电容值的地址是0x01,它是0x07,如果把地址改为读温度的地址0x04去读,它也是0x07, 哪位大虾知道 哪儿出的问题,读部分程序参考:
I2C_AutoEndCmd(I2C2,ENABLE);
I2C_ReloadCmd(I2C2,DISABLE);
I2C_NumberOfBytesConfig(I2C2,0X01);
I2C_MasterRequestConfig(I2C2,I2C_Direction_Transmitter);
I2C_SlaveAddressConfig(I2C2,0x90);
I2C_GenerateSTART(I2C2,ENABLE);
while( I2C_GetITStatus(I2C2,I2C_IT_TXIS)==RESET);
I2C_SendData(I2C2, 0x04);
/**************读取3字节数据*****************/
I2C_NumberOfBytesConfig(I2C2,0X03);
I2C_AutoEndCmd(I2C2,ENABLE);
I2C_ReloadCmd(I2C2,DISABLE);
//I2C_NumberOfBytesConfig(I2C2,0X01);
// I2C_NumberOfBytesConfig(I2C2,0X03);
I2C_MasterRequestConfig(I2C2,I2C_Direction_Receiver );
I2C_SlaveAddressConfig(I2C2,0x91);
I2C_GenerateSTART(I2C2,ENABLE);
while( I2C_GetITStatus(I2C2,I2C_IT_RXNE)==RESET);
//发送字节是高字节优先
recv[cnt]=I2C_ReceiveData(I2C2);
cnt++;
while( I2C_GetITStatus(I2C2,I2C_IT_RXNE)==RESET);
recv[cnt]=I2C_ReceiveData(I2C2);
cnt++;
while( I2C_GetITStatus(I2C2,I2C_IT_RXNE)==RESET);
recv[cnt]=I2C_ReceiveData(I2C2); |