问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F103CBT6 IIC写数据后IIC不能STOP的问题咨询

GD32 iic

GD32F103CBT6 IIC写数据后IIC不能STOP的问题咨询

lyyun2022-03-06
使用GD的硬件IIC通讯,代码用STM32的,能读但不能写,表现为写8个字节(一页)数据后时钟没办法恢复到高电平状态,咨询一下大家有没有比较通用的方法:


定位到应该是以上代码中不能使GD的IIC正常STOP,STM32和HK32都正常:
void I2C_EE_WaitEepromStandbyState2(void)
{
    I2C_GenerateSTOP(EEPROM_I2Cx, ENABLE);
    return;
    vu16 SR1_Tmp = 0;

    do {
        /* 发送起始信号 */
        I2C_GenerateSTART(EEPROM_I2Cx, ENABLE);

        /* 读 I2C1 SR1 寄存器 */
        SR1_Tmp = I2C_ReadRegister(EEPROM_I2Cx, I2C_Register_SR1);

        /* 发送 EEPROM 地址 + 写方向 */
        I2C_Send7bitAddress(EEPROM_I2Cx, EEPROM_ADDRESS,
                I2C_Direction_Transmitter);
    }
    // SR1 位 1 ADDR:1 表示地址发送成功,0 表示地址发送没有结束
    // 等待地址发送成功
    while (!(I2C_ReadRegister(EEPROM_I2Cx, I2C_Register_SR1) & 0x0002));

    /* 清除 AF 位 */
    I2C_ClearFlag(EEPROM_I2Cx, I2C_FLAG_AF);
    /* 发送停止信号 */
    I2C_GenerateSTOP(EEPROM_I2Cx, ENABLE);
}

回答 +关注 16
1500人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册