This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

使用stm32模拟IIC读取BQ20Z95的相对电量, 可以写进去0x16无应答,写0xA0有应答, 但使用命令后,感觉读取的数据有问题,转化后73,但是我测量电压还有13.9 ,总共电量14.4

Other Parts Discussed in Thread: EV2400


void IIC_Start(void)
{

SDA_OUT(); //sdaÏßÊä³ö

IIC_SDA=1;

IIC_SCL=1;

delay_us(5);

IIC_SDA=0;//START:when CLK is high,DATA change form high to low

delay_us(5);

IIC_SCL=0;


}

void IIC_Stop(void)
{

SDA_OUT();

IIC_SCL=0;

IIC_SDA=0;//STOP:when CLK is high DATA change form low to high

delay_us(5);

IIC_SCL=1;

IIC_SDA=1;

delay_us(5);


}


u8 IIC_Wait_Ack(void)
{

u16 ucErrTime=0;

SDA_IN(); //SDAÉèÖÃΪÊäÈë

IIC_SDA=1;

delay_us(2);

IIC_SCL=1;

delay_us(2);

while(READ_SDA)

{

ucErrTime++;

if(ucErrTime>200)

{

IIC_Stop();

return 1;

}

}

IIC_SCL=0;

return 0;
}


void IIC_Ack(void)
{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=0;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}

void IIC_NAck(void)
{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=1;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}


void IIC_Send_Byte(u8 txd)
{

u8 t;

SDA_OUT();

IIC_SCL=0;

for(t=0;t<8;t++)

{

if((((txd&0x80)>>7)&0x01)==0x01)

IIC_SDA=1;

else

IIC_SDA=0;

txd<<=1;

delay_us(5);

IIC_SCL=1;

delay_us(5);

IIC_SCL=0;

delay_us(5);

}

}

u8 IIC_Read_Byte()
{

unsigned char i,receive=0;

SDA_IN();//SDAÉèÖÃΪÊäÈë

for(i=0;i<8;i++ )

{

IIC_SCL=0;

delay_us(5);

IIC_SCL=1;

receive<<=1;

if(READ_SDA)receive++;

delay_us(5);

}

return receive;
}

u8 IIC_read_data()
{
uint8_t receive_data;

IIC_Start();
IIC_Send_Byte(0xa0);

IIC_Wai_Ack();

IIC_Send_Byte(0x0d);
IIC_Wait_Ack();
delay_us(50);

IIC_Start();
IIC_Send_Byte(0xa1);
IIC_Wait_Ack();
delay_us(40);

receive_data= IIC_Read_Byte();
IIC_Ack();
delay_us(40);


return receive_data;
}

频谱分析仪分析的图片

app.yinxiang.com/.../cc23f442-d129-49fb-8642-528bbd552dba