调试I2C时,发现代码跑到等待从机应答时波形不对,特此来论坛求解
int IIC_Wait_Ack(void)
{
uint8 ucErrTime=0;
uint8 Result = 0;
IIC_SDA_H;
IIC_SDA_IN; //SDA设置为输入
CyDelayUs(1);
IIC_SCL_H;
CyDelayUs(1);
Result = SDA_Read();
while(1 == Result)
{
ucErrTime++;
if(ucErrTime>50)
{
IIC_Stop();
return 0;
}
CyDelayUs(1);
Result = SDA_Read();
}
IIC_SCL_L;//时钟输出0
return 1;
}
其中IIC_SDA_IN这个宏我是这么定义的#define IIC_SDA_IN SDA_SetDriveMode(SDA_DM_ALG_HIZ) SDA引脚我设为双向驱动模式。是不是引脚驱动模式不对,作为输出时使用强驱动模式,作为输入应该使用哪种模式呢?
接下来放上原理图,希望坛主有空帮忙看看.
- 这一句跑完,发现SCL引脚被拉低了,正常情况SCL应该还是属于高电平的
IIC_SDA_IN; //SDA设置为输入
- 这是原理图