TI论坛
直播中

恩可口

9年用户 843经验值
私信 关注
[问答]

AMC7812和STM32F407进行硬件I2C通信,为什么总是停在第三个while循环里?


  •   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

回帖(1)

刘珊珊

2025-1-8 15:56:29
停在第三个while循环里, 这是发送从机地址后, 从机没有 ACK 响应. AMC7812 恐怕还没有进入工作状态, 或者地址弄错了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分