STM32 IIC学习记录
void IIC_Start(void)
{
SDA_OUT();
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;
delay_us(4);
IIC_SCL=0;
}
void IIC_Stop(void)
{
SDA_OUT();
IIC_SDA=0;
IIC_SCL=0;
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;
delay_us(4);
}
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=8;
SDA_OUT();
IIC_SCL=0;
while(t--)
{
if((txd & 0x80) >>7 )
IIC_SDA=1;
else
IIC_SDA=0;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i, receive=0,j=8;
while(j--)
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<1;
if(READ_SDA)
receive++;
delay_us(1);
if(!ack)
IIC_NAck();
else
IIC_Ack();
return receive;
}
}