AMC7812和STM32F407进行硬件I2C通信
if(num==0)
return 1;
while(I2C_GetFlagStatus(I2Cx,I2C_FLAG_BUSY));
I2C_AcknowledgeConfig(I2Cx,ENABLE);
I2C_GenerateSTART(I2Cx,ENABLE);
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2Cx,I2C_Addr,I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2Cx,addr);
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2Cx,ENABLE);
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2Cx,I2C_Addr,I2C_Direction_Receiver);
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
while(num)
{
if(num==1)
{
I2C_AcknowledgeConfig(I2Cx,DISABLE);
I2C_GenerateSTOP(I2Cx,ENABLE);
}
while(!I2C_CheckEvent(I2Cx,I2C_EVENT_MASTER_BYTE_RECEIVED));
*buf = I2C_ReceiveData(I2Cx);
buf++;
num--;
}
I2C_AcknowledgeConfig(I2Cx,ENABLE);
请问为什么总是停在第三个while循环里
I2C_Read(I2C1,0x2F,0x23,bufad,2); 这是调用程序
0x2F是AMC7812地址,0x23是ADC0通道的数据地址,通信方式选择I2C,参考电压是用外部提供的2.5V
停在第三个while循环里, 这是发送从机地址后, 从机没有 ACK 响应. AMC7812 恐怕还没有进入工作状态, 或者地址弄错了
供电正常,SPI/I2C管脚拉低选择I2C,A0,A1,A2都是高电平,这能代表它进入工作了吗---地址是0x2F
这个问题找到了,是后面地址没加方向位。
有新的问题来了
I2C_Write(I2C1,AMC7812ADDR,0x0A,0x34,0xFF);
I2C_Write(I2C1,AMC7812ADDR,0x0B,0x03,0xFF);
I2C_Write(I2C1,AMC7812ADDR,0x4C,0x26,0x00);
// I2C_Write(I2C1,AMC7812ADDR,0x4D,0x07,0x00);
I2C_Write(I2C1,AMC7812ADDR,0x4E,0xFF,0xFC);
I2C_Write(I2C1,AMC7812ADDR,0x50,0x60,0x00);
I2C_Write(I2C1,AMC7812ADDR,0x52,0x80,0x00);
// I2C_Write(I2C1,AMC7812ADDR,0x53,0xFF,0xFC);
这些配置好像不能让它动起来,还需要哪些配置它才能动起来呢
动起来,是什么意思呢。现在,是要得到转换数据吗。没有得到数据,还是得到的数据不正确呢。确定一下当前的问题点。