SGP30读到的数据全是0,这个是我的代码,请问是什么问题
uint8_t Data;
MyI2C_Start();
MyI2C_SendByte(0xB0);
MyI2C_ReceiveAck();
MyI2C_SendByte(0x36);
MyI2C_ReceiveAck();
MyI2C_SendByte(0x82);
MyI2C_ReceiveAck();
MyI2C_Start();
MyI2C_SendByte(0xB1);
MyI2C_ReceiveAck();
Data = MyI2C_ReceiveByte();
MyI2C_SendAck(1);
MyI2C_Stop();
OLED_ShowHexNum(1,1,Data,8);
可以在MyI2C_ReceiveAck()函数中添加延时,可以使用delay函数或者使用硬件定时器进行延时。
修改后的代码如下:
void MyI2C_ReceiveAck(void)
{
SDA_IN(); //设置SDA为输入模式
SDA_HIGH(); //释放总线
SCL_HIGH(); //拉高时钟线
delay_us(2); //添加延时
SCL_LOW(); //拉低时钟线
}
其中delay_us(2)表示延时2微秒,可以根据实际情况调整延时时间。
不知道你这个问题是否已经解决, 如果还没有解决的话: