路遇学堂 发表于 2021-11-3 14:15

第8-9个时钟,数据突变是怎么回事?

用gpio模拟I2c通信,
uint8_t wait_for_ack(void)
{
       
        uint8_t ACK=1;
        uint8_t timer =0
        GPIO_SetDir(GPIOB,GPIO_PIN10,GPIO_IN);
       
        GPIO_Analog_I2C_SCL(0);
        Delay();
        while((!GPIO_GetPinLevel(GPIOB,GPIO_PIN10))&& timer<50)
        {
        ACK = GPIO_GetPinLevel(GPIOB,GPIO_PIN10);
        Delay();
                break;
        }
        GPIO_Analog_I2C_SCL(1);
        Delay();
        GPIO_Analog_I2C_SDA(1);
        Delay();
        return ACK;
}

void i2c_SendByte(uint16_t byte)
{
    uint8_t i;
        GPIO_SetDir(GPIOB,GPIO_PIN9,GPIO_OUT);
        GPIO_SetDir(GPIOB,GPIO_PIN10,GPIO_OUT);
    for (i=0; i<8; i++)
    {               
               
                GPIO_Analog_I2C_SCL(0);
                Delay();
      if (byte & 0x80)   
                {
                        GPIO_Analog_I2C_SDA(1);
                }
                else
                {
                        GPIO_Analog_I2C_SDA(0);
                }
                Delay();
                GPIO_Analog_I2C_SCL(1);
        Delay();
        byte <<= 1;          
        Delay();
    }
       
        GPIO_Analog_I2C_SDA(1);   
        Delay();
}




chenjun89 发表于 2021-11-3 18:42

应该是切换IO方向时的抖动
页: [1]
查看完整版本: 第8-9个时钟,数据突变是怎么回事?