大学生
最后登录1970-1-1
在线时间 小时
注册时间2018-7-28
|
读取到这样子的波形,请问我该判断是程序哪里出了问题呢?
程序如下:
void IIC_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SD7218AS_I2C_GPIO_APBxClock_FUN(SD7218AS_I2C_GPIO_CLK,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(SD7218AS_I2C_SDA_PORT , &GPIO_InitStructure);
GPIO_SetBits(SD7218AS_I2C_SDA_PORT ,GPIO_Pin_5|GPIO_Pin_6);
}
void IIC_Start(uchar a)
{ IIC_SDA=1;
IIC_SCL=1;
SDA_OUT();
delay_us(400);
IIC_SDA=0;
delay_us(300);
IIC_SCL=0;
delay_us(300);}
}
void IIC_Ack(uchar a)
{ IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(200);
IIC_SCL=1;
delay_us(200);
IIC_SCL=0;}
}
void IIC_Stop(uchar a)
{
{IIC_SCL=0;
IIC_SDA=0;
SDA_OUT();
delay_us(200);
IIC_SCL=1;
delay_us(200);
IIC_SDA=1;//
delay_us(200);
}
}
}
u8 I2C_WaitToAck(uchar a)
{
SDA_IN(); // SDAéèÖÃÎaêäèë
delay_us(10);
IIC_SCL=1;
delay_us(10);
if(READ_SDA)
{
return 1;
}
else
{IIC_SCL=0;
delay_us(10);
return 0;
} }
}
void IIC_NAck(uchar a)
{IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(200);
IIC_SCL=0;
delay_us(200);
IIC_SCL=1;}
}
void I2C_SendByte(uchar txd,uchar a) // u8
{IIC_SCL=0;
SDA_OUT();
for(t=0;t<8;t++)
{
if((txd&0x80)>0)
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(200);
IIC_SCL=1;
delay_us(200);
IIC_SCL=0;
}}
}
u8 IIC_Read_Byte(unsigned char ack,uchar a)
{ SDA_IN();
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(200);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive++;
delay_us(200);
}
if (!ack)
IIC_NAck(0);
else
IIC_Ack(0);
return receive;
}
}
u8 ReadByte(uchar Reg_Addr )
{
u32 data;
IIC_Start(0);
I2C_SendByte(0x54|0,0);
I2C_WaitToAck(0);
I2C_SendByte(Reg_Addr,0);
I2C_WaitToAck(0);
IIC_Start(0);
I2C_SendByte(0x54|1,0);
I2C_WaitToAck(0);
data=IIC_Read_Byte(0,0);
IIC_NAck(0);
IIC_Stop(0);
return data;
}
void delay_us(u32 i)
{u32 temp;
SysTick->LOAD=9*i;
SysTick->CTRL=0x01;
SysTick->VAL=0;
do
{
temp=SysTick->CTRL;
}
while((temp&0x01)&&(!(temp&(1<<16))));
SysTick->CTRL=0;
SysTick->VAL=0;
}
附件是对应的芯片数据手册
|
|